как найти функции установки/получения свойства (Object.defineProperty)

Предположим, свойство определено следующим образом:

Object.defineProperty(window, 'prop', {
    set: setVal,
    get: getVal,
    configurable: true
}) ;

Что я хотел бы сделать, так это переопределить window.prop, например:

var ref2setVal = window.prop.set ;
var ref2getVal = window.prop.get ;

Object.defineProperty(window, 'prop', {
    set: function(val){ ref2setVal(val*2); },
    get: function()   { return 10 + ref2getVal(); }
}) ;

window.prop.set/get не работает, но возможно ли что-то подобное?


person Jeanluca Scaljeri    schedule 04.05.2013    source источник


Ответы (2)


Object.getOwnPropertyDescriptor соответствует стандартам:

var desc = Object.getOwnPropertyDescriptor(window, "prop");

var ref2setVal = desc.set;
var ref2getVal = desc.get;
person Community    schedule 04.05.2013
comment
Документы: developer.mozilla.org/en-US/ документы/JavaScript/Справочник/ - person Felix Kling; 04.05.2013
comment
Спасибо за ссылку @FelixKling. Я добавлю это. - person ; 04.05.2013

Использовать

var ref2setVal = window.__lookupGetter__('prop') ;
var ref2setVal = window.__lookupSetter__('prop') ;

См. http://javascriptweblog.wordpress.com/2010/11/15/extending-objects-with-javascript-getters/.

Изменить: см. http://jsfiddle.net/5zvvJ/.

person Yauhen Vasileusky    schedule 04.05.2013
comment
__lookup[SG]etter__ нестандартен и устарел. - person Felix Kling; 04.05.2013