AS2:设置新属性时的调用方法

时间:2012-02-07 15:30:28

标签: flash actionscript actionscript-2

我有一个dynamic Class,我希望每次在运行时将属性附加到类中时调用方法。

例如:

dynamic class Example
{

    public function Example()
    {
        trace("New instance created");
    }

    public function setter(name:String, value:String):Void
    {
        trace("Property '"+name+"' created with value '"+value+"'");
    }
}

然后从时间轴开始,我将新属性添加到Example:

Example.newProperty = "some value";

我想让它追踪:

  

使用值'some value'创建属性'newProperty'

我完全清楚这可以通过使用函数来设置如下的属性:

public function setter(name:String, value:String):Void
{
    this[name] = "some value";
    trace("Property '"+name+"' created with value '"+value+"'");
}

并像这样调用它:

Example.setter("newProperty", "some value");

但是,我希望通过常规.dot运算符添加属性时自动触发此方法,而不必显式调用函数。

这可能吗?

2 个答案:

答案 0 :(得分:0)

既然它是AS2,那么,是的,你的类必须实现__resolve(x)方法。但是,我认为这是一个非常值得怀疑的设计决定。接受键和值的函数对我来说看起来好多了,最后代码也少了。

答案 1 :(得分:0)

可以在这里使用Proxy

示例类:

package
{
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;

    dynamic public class Example extends Proxy
    {

        private var _properties:Object = {};


        override flash_proxy function setProperty(name:*, value:*):void
        {
            _properties[name] = value;
            trace("Property '" + name + "' created with value '" + value + "'");
        }


        override flash_proxy function getProperty(name:*):*
        {
            return _properties[name];
        }

    }
}

演示代码:

var ex:Example = new Example();

ex.something = 10;
ex.more = "something more";

trace(ex.something);
trace(ex.more);

输出:

  

使用值“10”创建的属性“某事物”   物业'更多'创造了价值'更多'的东西   10个
  更多的东西