Добавить сеттер в прототип во Flex - PullRequest
1 голос
/ 26 января 2010

Во Flex вы можете добавлять функции к прототипу класса; а как добавить сеттер?

Например, с A некоторым (не динамическим) классом вы можете сделать это:

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

И это вызовет функцию foo. Но как вы можете добавить установщик, чтобы установка свойства вызывала установщик (точно так же, как если бы вы объявили установщик «обычным» способом в классе A). Итак, я хочу что-то вроде этого:

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

PS: манипулирование прототипом - это необычная вещь во Flex, и я бы не рекомендовал ее вообще. Но ради этого вопроса просто предположим, что есть причина динамически добавлять сеттер.

Ответы [ 2 ]

2 голосов
/ 26 января 2010

ActionScript 1/2 поддерживал это, вызывая addProperty (name, getter, setter). Это может быть сделано на отдельных объектах или на прототипе. AS3 не поддерживает это, даже с флагом "-es".

Для справки, вот пример того, как это было сделано:

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 голосов
/ 27 января 2010

Насколько я знаю, не существует способа использовать старую методологию создания прототипов для методов получения / установки (на самом деле я считаю, что общая сумма внутренних классов flex sdk, использующих любой тип прототипирования, равна 0).

В любом случае геттеры / сеттеры не доступны в игре по взлому прототипов. Даже если бы они были, я мог бы представить, что есть лучшая альтернатива той, которую вы пытаетесь реализовать, которая немного лучше сыграла бы с архитектурой flashPlayer. Мой 2р.

...