如何查找属性的set / get函数(Object.defineProperty)

时间:2013-05-04 11:58:52

标签: javascript 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不起作用,但这样可能吗?

2 个答案:

答案 0 :(得分:4)

Object.getOwnPropertyDescriptor符合标准的方式:

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

var ref2setVal = desc.set;
var ref2getVal = desc.get;

答案 1 :(得分: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/