Получить функцию Getter в Javascript
В JavaScript есть возможность создавать геттеры и сеттеры следующим образом:
function MyClass(){
var MyField;
this.__defineGetter__("MyField",function(){
return MyField;
});
this.__defineSetter__("MyField",function(value){
MyField = value;
});
}
Но есть ли способ получить функцию Getter или Setter FUNCTION? Я думаю о чем-то вроде этого:
var obj = new MyClass();
obj.__getSetter__("MyField")("MyValue");
Мне нужна такая функциональность при расширении базовых классов. Например:
Класс "A" имеет поле "a", класс "B" распространяется от "A" , а также хочет иметь поле "a".
Чтобы передать значения из поля "a" объекта "B" в "a" -поле объекта "A" , мне нужно получить функцию setter/getter, прежде чем переопределять их.
Ответы
Ответ 1
Старый способ
__defineGetter
и __defineSetter__
были устаревшими в то время, когда этот вопрос был первоначально опубликован.
Доступ к этим функциям accessor и mutator выполнялся с помощью __lookupGetter__
и __lookupSetter__
соответственно.
Пример
function MyClass() {
var MyField
this.__defineGetter__("MyField",function(){
return MyField
})
this.__defineSetter__("MyField",function(value){
MyField = value
})
}
var obj = new MyClass()
obj.__lookupSetter__("MyField")("MyValue")
console.log(obj.MyField)
Ответ 2
На самом деле методы __lookupGetter__
и __lookupSetter__
устарели. Вместо этого вы должны использовать:
/* __lookupGetter__ */
Object.getOwnPropertyDescriptor(obj, 'MyField').get;
/* __lookupSetter__ */
Object.getOwnPropertyDescriptor(obj, 'MyField').set;
Ответ 3
Посмотрите lookupGetter.
Ответ 4
В Google Chrome lookupGetter/lookupSetter нарушен: http://code.google.com/p/chromium/issues/detail?id=13175