2

假设一个属性定义如下:

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 不起作用,但是这样的事情可能吗?

4

2 回答 2

4

Object.getOwnPropertyDescriptor是符合标准的方式:

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

var ref2setVal = desc.set;
var ref2getVal = desc.get;
于 2013-05-04T12:12:37.143 回答
1

利用

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/

于 2013-05-04T12:07:28.527 回答