【问题标题】:ActionScript Calling Private Functions By Changing Public Variables?ActionScript 通过更改公共变量调用私有函数?
【发布时间】:2011-03-03 06:04:04
【问题描述】:

我以前从未尝试过这样做,所以我有点晕头转向。我想在 myClass 自定义类中有一个名为 enabled 的公共布尔值。如果调用要更改,如何从更改中触发函数?

我应该向我的变量添加一个 Event.CHANGE 事件监听器吗?我可以这样做吗?还是有更标准的方法?

【问题讨论】:

    标签: actionscript-3 variables public


    【解决方案1】:

    我们通常为此使用属性。
    属性就像外部的公共变量——您可以设置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;
        }
    }
    

    请注意,它们不能与您的私有变量同名,并且您不需要同时定义它们。实际上,您甚至不需要 setter/getter 的变量。您可以像使用任何函数一样使用它们——它们只是为您提供不同的语法。
    例如:

    var object:CustomClass = new CustomClass();
    object.enabled = false;
    if (object.enabled) {
        ...
    }
    

    它们非常适合公开一个简单的 API,如果类的内部必须更改,您可以避免重写外部代码。

    getterssetters 上的 AS3 参考。

    【讨论】:

    • 难道他不想要在属性更改时调用函数的东西,这样当对象的启用被更改时(动态地?)某些东西会监听更改吗?
    • 如果是这样,我误解了他的意思。
    • 好吧,可以调用 setter 函数或实际包含根据新设置值处理更改的代码。这是 AS3 API 使用的代码格式,因此我们可以调用诸如 mySprite.alpha = 0.5 或 myTextField.enabled = true 之类的属性吗?
    • 是的,这就是您可以覆盖它们的原因——属性的另一个优点。如果你需要外部的 CHANGE 事件,你仍然可以实现 EventDispatcher 接口并从 setter 派发一个事件......很简单。
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 2012-05-29
    • 2010-09-20
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2011-12-03
    • 2016-01-09
    相关资源
    最近更新 更多