javascript - 是否可以捕获 JavaScript 中的属性访问?

标签 javascript properties aop

我希望能够提供一个 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/

相关文章:

javascript - 理解带有 unicode 字符的 Canvas fillText 的问题

javascript - 在 protractor.js 中运行的异步测试是否有默认超时

objective-c - Property & Private & Extended Class组合接口(interface)困惑

c# - 使用 PostSharp 在 c# 中的构造函数上应用方面

java - 记录异常并继续执行,代码不会困惑

javascript - 如何使用选择器通过箭头键切换元素?

javascript - Node MySQL - 可重用连接模块

c# - 获取通过 PropertyDescriptorCollection 循环的 List 项的类型

properties - 属性中的 VB6 错误处理 -> 最佳实践?

java - 拦截器的@AroundInvoke未触发