Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 ActionScript通过更改公共变量调用私有函数?_Actionscript 3_Variables_Public - Fatal编程技术网

Actionscript 3 ActionScript通过更改公共变量调用私有函数?

Actionscript 3 ActionScript通过更改公共变量调用私有函数?,actionscript-3,variables,public,Actionscript 3,Variables,Public,我以前从来没有试过这样做,所以我的头有点晕。我希望在myClass自定义类中启用一个名为enabled的公共布尔值。如果调用它进行更改,如何从更改中触发函数 我应该向变量添加Event.CHANGE事件侦听器吗?我可以这样做吗?或者有更标准的方法吗?我们通常使用属性来实现这一点。 属性就像外部的公共变量——您可以设置instance.enabled=true等等。。但是您可以将属性定义为类的getter和/或setter函数。 它们是在值更改时执行自定义逻辑的最佳位置 例如: public cl

我以前从来没有试过这样做,所以我的头有点晕。我希望在myClass自定义类中启用一个名为enabled的公共布尔值。如果调用它进行更改,如何从更改中触发函数


我应该向变量添加Event.CHANGE事件侦听器吗?我可以这样做吗?或者有更标准的方法吗?

我们通常使用属性来实现这一点。
属性就像外部的公共变量——您可以设置
instance.enabled=true等等。。但是您可以将属性定义为类的getter和/或setter函数。
它们是在值更改时执行自定义逻辑的最佳位置

例如:

public class CustomClass {
    private var _enabled:Boolean = false;

    public function set enabled(value:Boolean):void {
        trace('CustomClass.enabled is now', value);
        this._enabled = value;
    }

    public function get enabled():Boolean {
        trace('CustomClass.enabled was retrieved');
        return this._enabled;
    }
}
var object:CustomClass = new CustomClass();
object.enabled = false;
if (object.enabled) {
    ...
}
请注意,它们不能与您的私有变量具有相同的名称,并且您不需要同时定义它们。实际上,setter/getter甚至不需要变量。您可以像使用任何函数一样使用它们——它们只是为您提供了不同的语法。
例如:

public class CustomClass {
    private var _enabled:Boolean = false;

    public function set enabled(value:Boolean):void {
        trace('CustomClass.enabled is now', value);
        this._enabled = value;
    }

    public function get enabled():Boolean {
        trace('CustomClass.enabled was retrieved');
        return this._enabled;
    }
}
var object:CustomClass = new CustomClass();
object.enabled = false;
if (object.enabled) {
    ...
}
它们非常适合公开一个简单的API,如果类的内部必须更改,则可以避免重写外部代码


AS3引用和。

他不希望在属性更改时调用函数,这样当对象的启用被更改时(动态地?),就会有东西侦听更改吗?如果是这样,我误解了他的意思,可以进行setter函数调用,或者实际包含根据新的set值处理更改的代码。这是AS3 API使用的代码格式吗?这样我们就可以调用myprite.alpha=0.5或myTextField.enabled=true之类的属性?是的,这就是为什么可以覆盖它们——属性的另一个优点。如果您需要外部的更改事件,您仍然可以实现EventDispatcher接口,并从setter发送事件。。。很简单。