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

how to find the set/get functions of a property (Object.defineProperty)

本文关键字:函数 Object defineProperty get 何找 属性 set      更新时间:2023-09-26

假设一个属性定义如下:

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

我要做的是重新定义window。道具,例如:

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

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

var desc = Object.getOwnPropertyDescriptor(window, "prop");
var ref2setVal = desc.set;
var ref2getVal = desc.get;

使用

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/