【问题标题】:AS3: Call function from one class to anotherAS3:从一个类调用函数到另一个类
【发布时间】:2012-06-18 13:22:48
【问题描述】:

所以我有两个类的A类B类

我有一个希望在 Class A 上使用的功能,但我的 flash fla 文件链接到 Class B

所以我做了以下事情:

A 类 - 函数

    public function Fb_Checks()
    {
        // constructor code
        load_top_bar();
    }

B 类 - 导入

import ClassA;

那么如果我尝试从 B 类调用 A 类中的函数:

Fb_Checks();

我收到以下错误:

调用可能未定义的方法 Fb_Checks。

我还应该做些什么来让它发挥作用吗?

【问题讨论】:

    标签: actionscript-3 class


    【解决方案1】:

    您需要获取有关 OOP 的更多信息。它是如何工作的,那么理解概念会更容易。

    现在简单解释一下:我们有 ClassAClassBClassC

    ClassA
    {
        var value:ClassB;
    
        public function ClassA ()
        {
            // each variable needs to initialize unless it is the ClassC, see below
            // Only after that you will be able to reach the public properties
            // of the class.
            value = new ClassB();
            value.calculate();
        }
    }
    
    ClassB
    {
        var value:Number;
    
        public function ClassB ()
        {
    
        }
    
        public function calculate():void
        {
            // these must be statis
            ClassC.sum(150, 450);
        }
    }
    
    ClassC
    {
        // if the function is static, then you can call it without initializing
        // the class
        static public function sum(value1:Number, value2:Number):Number
        {
            return value1 + value2;
        }
    }
    

    【讨论】:

      【解决方案2】:

      您必须先创建 ClassA 的实例,然后才能调用它的公共函数。

      package  
      {
          import ClassA;
      
          public class ClassB
          {
      
              public function ClassB()
              {
                  var instanceOfA:ClassA = new ClassA();
      
                  instanceOfA.Fb_Checks();
              }
          }
      }
      

      如果您想让它像您的示例一样工作,您应该使用 ClassA 扩展您的 ClassB。在这种情况下,它的公共和受保护函数也可以在 ClassB 中使用。

      package  
      {
          import ClassA;
      
          public class ClassB extends ClassA 
          {
      
              public function ClassB()
              {
                  Fb_Checks();
              }
          }
      }
      

      【讨论】:

      • 所以我希望它像您的底部示例一样工作,除了 ClassB 已经扩展了“MovieClip”并且您不能乘以扩展可以吗?
      • 不,你不能,但是如果 ClassA 扩展了 MovieClip,ClassB 也会继承 MovieClip
      • 是的,您可以:ClassA extends MovieClipClassB extends ClassA。而ClassB 将能够从ClassAMovieClip 访问所有publicprotectedinternal 函数。
      • @JevgenijDmitrijev 所以这已经奏效了,但是现在所有从 ClassA 访问主机上的东西的函数都出现了这个错误:Access of undefined property 我知道为什么会这样,例如它正在寻找一个MC 调用了 photo 但那不是在这个框架上(甚至在同一个 fla 文件中)但它是否应该检查函数,即使它们没有被调用?
      • 通常如果你的ClassA自己调用了一些函数,而ClassB扩展了ClassA,那么ClassA调用的所有函数都会在@987654336上自动调用@初始化。
      猜你喜欢
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多