2010-01-26 39 views
1

在Flex中,您可以將函數添加到Class的原型中;但你如何添加一個setter?在Flex原型中添加setter

例如,對於一些A(非動態)類,你可以這樣做:

var o:Object = new A(); 
A.prototype.myFunction = function():void{trace("foo");} 
o.foo(); 

這將調用foo功能。但是如何添加一個setter,以便設置屬性來調用setter(就像在A類中以「常規」方式聲明setter時那樣)。所以,我想是這樣的:

// doesn't work!  
A.prototype["set myProperty"] = mySetter; 
o.myProperty = "test"; // should call mySetter 

PS:操縱原型是在Flex中做了一個不尋常的事情,而不是我一般建議。但是爲了這個問題,只是假設有一個動態添加setter的理由。

回答

2

ActionScript 1/2通過調用addProperty(name,getter,setter)支持此操作。這可以在單個物體上或原型上完成。即使使用「-es」標誌,AS3也不支持此功能。

以供參考,在這裏是它如何被使用做一個例子:

var A = function() {}; 

A.prototype.addProperty("myProp", 
    function() { 
     trace("myProp getter: " + this._myProp); 
     return this._myProp; 
    }, 
    function(value) { 
     trace("myProp setter: " + value); 
     this._myProp = value; 
    }); 

var a = new A(); 
a.myProp = "testing"; 
var x = a.myProp; 
0

據我所知,目前還沒有辦法使用getter/setter方法舊的原型方法(逸岸,我相信使用任何類型原型的內部flex sdk類的總數是0)。

無論如何,getter/setter在原型黑客遊戲中都不可用。即使有,我想也會有更好的替代方案,你可以嘗試使用flashPlayer的架構來更好地實現。我的2p。

+0

這是不正確的:「getter/setters在原型黑客遊戲中不可用」。 getter/setter自從至少使用Flash 5並且可能早於AS3類(AS2類僅僅是語法糖並編譯爲原型使用)之前就​​已經在使用。 – 2010-01-27 02:00:48