我想要的是能够包装一个 JavaScript 属性来修改 get/set 上的行为。
对于作为值的属性,我可以执行以下操作:
var obj = {
myProperty : 0
};
function notifyOfChange(obj, propertyName) {
var propertyValue = obj[propertyName];
Object.defineProperty(obj, propertyName, {
get : function() { return propertyValue; },
set : function(newValue) {
var propertyValue = newValue;
console.log("Message from notifyOfChange.");
}
});
};
obj.myProperty = 10; // outputs "Message from notifyOfChange."
但是,如果myProperty已经有一个 getter/setter 怎么办?
var obj = Object.create({}, {
myProperty : {
get : function() { return this._myProperty; },
set : function(value) {
console.log("Message from obj itself.");
this._myProperty = value;
},
configurable : true
}
});
obj.myProperty = 10; // outputs "Message from obj itself";
notifyOfChange(obj, "myProperty");
obj.myProperty = 10; // outputs "Message from notifyOfChange."
有没有办法检测myProperty匿名设置器,以便我可以在notifyOfChange中调用它?
注意:我想让 notifyOfChange 与任何对象一起工作,因此仅对myProperty设置器使用命名函数是行不通的。