1

我在我的一个类中定义了这个函数:

public function onUse():void {};

然后在我的另一个类(我们称之为“class2”)中,我创建了这个类的一个对象,然后想用另一个覆盖这个函数。经过一些 Google-Fu 之后,我找到了这个,并使用了它......

button.onUse {
    variable = value;
}

...但它会立即执行,而不是在调用 onUse() 时执行 - 这似乎总是一个空函数。

我没有找到更多的东西 - 我自己尝试了一些东西,比如在 class2 和 using 中指定一个函数button.onUse = function();,但它总是抛出错误。

谁能告诉我我正在尝试做的事情是否真的可能,如果是,我该怎么做?

4

2 回答 2

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();

因此,在运行时不可能将不同的函数分配给实例的类方法。

但是,您可以让您的原始类包含一个type 字段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();
于 2012-04-04T15:33:12.657 回答
0

检查语法

button.onUse {
    variable = value;
}

一个函数将被定义为

公共函数 onUse():void {};

并被覆盖

override public function onUse():void {
}

在不同的班级

您尝试执行此操作的方式并不构成覆盖功能。

我在类似情况下所做的是在类中创建一个 onClickFunction 函数

public var onClickFunction:Function = null; 

然后在 CLICK 事件监听函数中添加

if(onClickFunction != null){
    onClickFunction();
}

然后你可以通过做这样的事情来分配你的点击功能

button.onClickFunction = function():void{ variable = value; // 做东西 }

这不是最好的方法,但可能是实现功能的最简单方法。理想情况下,您会按照太空海盗建议的方式使用继承。

于 2012-04-04T15:43:30.490 回答