我有一个名为'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);
它说未定义。有人能告诉我我错过了什么。我觉得这种感觉是我忽略的一个非常基本的东西!
答案 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();
}
}
}