我在我的一个班级中定义了这个函数:
public function onUse():void {};
然后在我的另一个类中(让我们称之为“class2”),我创建了这个类的对象,然后想要用另一个类重写这个函数。在一些Google-Fu之后,我找到了这个,然后用它......
button.onUse {
variable = value;
}
...但它会立即执行,而不是在调用onUse()时 - 它似乎是一个空函数,总是。
我没有找到更多 - 我自己尝试了一些东西,比如在class2中指定一个函数并使用button.onUse = function();
,但它总是会抛出错误。
任何人都可以告诉我,我想要做的事情是否真的可行,如果是,我该怎么做?
答案 0 :(得分:3)
您只能在扩展课程时覆盖函数:
public class A {
public function foo():void {
doStuff();
}
}
public class B extends A {
override public function foo():void {
doOtherStuff();
}
}
var n:A = new A();
n.foo(); // => calls doStuff();
var o:B = new B();
o.foo(); // => calls doOtherStuff();
因此,在运行时无法为实例的类方法分配不同的函数。
但是,您可以让原始类包含类型为Function
的字段,然后只为其分配一个不同的闭包。
public class A {
public var foo:Function;
}
var n:A = new A();
n.foo = function ():void {
doStuff();
};
n.foo(); // => calls doStuff();
var o:A = new A();
o.foo = function ():void {
doOtherStuff();
}
o.foo(); // => calls doOtherStuff();
答案 1 :(得分:0)
检查
的语法button.onUse {
variable = value;
}
函数将被定义为
public function onUse():void {};
并用
覆盖override public function onUse():void {
}
在另一个班级
您尝试这样做的方式并不构成覆盖功能。
我在类似情况下所做的是在类
中创建一个onClickFunction函数public var onClickFunction:Function = null;
然后在CLICK事件监听器函数中添加
if(onClickFunction != null){
onClickFunction();
}
然后你可以通过做这样的事情来分配你的点击功能
button.onClickFunction = function():void { 变量=值; // 做东西 }
这不是最好的方法,但可能是实现功能的最简单方法。理想情况下,你会像隔离物所暗示的那样使用遗传。