我希望能够提供一个 JavaScript 函数,每当查询或更新指定对象的任何属性时都会调用该函数。这可能吗?如果可以,怎么做?
举一个简单的例子,如果我有 obj = { a:3 }
,我希望每当任何代码查询 obj.a
时都调用一些函数,并且能够返回我想要的任何内容而不是其当前值,例如4 个而不是 3 个。
最佳答案
很简单,您可以使用Object.prototype.defineProperty
。更多信息here 。
回答您的问题:
var obj = {};
Object.defineProperty(obj, "a", {
get: function() {console.log("I've been accessed"); return 5;//or whatever value}
});
console.log(obj.a)
<强> Working fiddle
更新
以上可以简写。
Object.prototype.addMonitoredGetter = function(property, value, callback) {
Object.defineProperty(this, property, {
writable: false,
get: function() {callback(); return this[property]
};
};
这里的回调可以是监听函数。当然,需要默认参数和检查,但它应该可以解决问题。
关于javascript - 是否可以捕获 JavaScript 中的属性访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335682/