Получить функцию 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;