我希望能够提供一个JavaScript函数,只要查询或更新指定对象的任何属性,就会调用该函数。那可能吗,如果是的话,怎么样?
举一个简单的例子,如果我有obj = { a:3 }
,我想在任何代码查询obj.a
时调用一些函数,并且能够返回我想要的任何函数而不是它的当前值,例如4而不是3。
答案 0 :(得分:2)
很简单,您可以使用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]
};
};
这里的回调可能是监控功能。当然,需要默认的参数和检查,但它应该可以解决问题。
答案 1 :(得分:0)