0

我希望能够提供一个 JavaScript 函数,每当查询或更新指定对象的任何属性时都会调用该函数。这可能吗,如果可以,怎么做?

举一个简单的例子,如果我有obj = { a:3 },我希望在任何代码查询时调用一些函数obj.a,并且能够返回我想要的任何东西而不是它的当前值,例如 4 而不是 3。

4

2 回答 2

2

很简单,可以用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]
    };
};

这里的回调可能是监控功能。当然,需要默认参数和检查,但它应该可以解决问题。

于 2013-05-02T10:33:08.447 回答
0

有一种可用于 Firefox 的监视方法...

o.watch("p", function(...)

http://jsfiddle.net/NTc52/

于 2013-05-02T10:56:13.233 回答