我有一个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
运算符添加属性时自动触发此方法,而不必显式调用函数。
这可能吗?
答案 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个
更多的东西