是否可以在JavaScript中捕获属性访问权限?

时间:2013-05-02 10:25:59

标签: javascript properties aop

我希望能够提供一个JavaScript函数,只要查询或更新指定对象的任何属性,就会调用该函数。那可能吗,如果是的话,怎么样?

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

2 个答案:

答案 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)

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

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

http://jsfiddle.net/NTc52/

相关问题