我希望能够提供一个 JavaScript 函数,每当查询或更新指定对象的任何属性时都会调用该函数。这可能吗,如果可以,怎么做?
举一个简单的例子,如果我有obj = { a:3 }
,我希望在任何代码查询时调用一些函数obj.a
,并且能够返回我想要的任何东西而不是它的当前值,例如 4 而不是 3。
我希望能够提供一个 JavaScript 函数,每当查询或更新指定对象的任何属性时都会调用该函数。这可能吗,如果可以,怎么做?
举一个简单的例子,如果我有obj = { a:3 }
,我希望在任何代码查询时调用一些函数obj.a
,并且能够返回我想要的任何东西而不是它的当前值,例如 4 而不是 3。
很简单,可以用Object.prototype.defineProperty
。更多关于它的信息。
要回答您的问题:
var obj = {};
Object.defineProperty(obj, "a", {
get: function() {console.log("I've been accessed"); return 5;//or whatever value}
});
console.log(obj.a)
更新
以上可以简写。
Object.prototype.addMonitoredGetter = function(property, value, callback) {
Object.defineProperty(this, property, {
writable: false,
get: function() {callback(); return this[property]
};
};
这里的回调可能是监控功能。当然,需要默认参数和检查,但它应该可以解决问题。