AS3未定义函数#1006

时间:2014-01-13 10:15:56

标签: actionscript-3 import

我有一个名为'main.as'的父类。我试图让子类调用main的函数。它们都位于同一个文件夹中。

// main.as //
package {

  public class main extends MovieClip {

    public function main() {
      var child:child_mc = new child_mc(this);
    }

    public function callFunction():void {
      trace("Done it");
    }

  }
}

// child.as //
package {
  import main;

  public class child extends MovieClip {

    private var main:MovieClip = new MovieClip();

    public function child(main:MovieClip):void {
      this.main = main;
      main.callFunction();
    }

  }
}

这是我一直在犯的错误:

TypeError: Error #1006: callFunction is not a function.

所以我尝试做了这样的追踪

trace(main.callFunction);

它说未定义。有人能告诉我我错过了什么。我觉得这种感觉是我忽略的一个非常基本的东西!

1 个答案:

答案 0 :(得分:1)

您的“子”包被定义为“主”。我甚至不确定它是如何遵守的,更不用说跑到显示你得到的错误信息。

我相信下面的代码应该符合您的预期。

(我也冒昧地重命名类以使用CamelCase(带有初始上限)来遵守最佳实践并更容易区别于变量名称。)

<强> Main.as

package {

    public class Main extends MovieClip {

        public function Main() {
            var child:ChildMC = new ChildMC();
            child.main = this;
        }

        public function callFunction():void {
            trace("Done it");
        }

    }
}

编辑:我刚看到您的评论指出child_mc是图书馆中的MovieClip。我想那时child类被设置为child_mc的基类?

如果是这样,你不能通过实例化器传递属性,你需要找到另一种方法将Main类的实例传递给Child类。

一种方法是添加 setter ,如下所示:

Child.as (ChildMC的基类)

package {

    public class Child extends MovieClip {

        private var _main:Main;

        public function Child() {

        }

        public function set main(main:Main):void {
            this._main = main;
            this._main.callFunction();
        }

    }
}