检测何时将新属性添加到Javascript对象?

时间:2010-05-05 17:24:22

标签: javascript object properties

使用内置javascript对象的简单示例: navigator.my_new_property =“有些价值”; //我们可以检测到这个新属性已被添加吗?

我不想经常轮询对象以检查新属性。 是否有某种类型的更高级别的对象设置器而不是显式声明要监视的属性?

同样,我不想检测属性值是否更改,而是在添加新属性时。

想法? 感谢

2 个答案:

答案 0 :(得分:6)

不。确定何时写入属性的现有方法:

  • 使用defineProperty(obj, name, fn);
  • 定义的ECMAScript 5 setter
  • 使用__defineSetter__(name, fn);
  • 定义的旧版JavaScript setter
  • 传统的Netscape / Mozilla watch(name, fn);

都是基于名称的,因此无法捕获使用以前未知名称编写的新属性。在任何情况下,navigator都可能是“主机对象”,因此您不能依赖其上可用的任何普通JavaScript Object接口。

提供回调的轮询或显式setter方法就是你所能做的一切。

类似情况:Getter/setter on javascript array?

答案 1 :(得分:4)

ES6 introduces the concept of Proxies: es6 proxies on MDN.

Here is a simple example:

let objectToSpy = {};
let handler = {
    set: (target, prop, value)=>{
        console.log('new prop:', prop);
        target[prop] = value;
    }
};

let proxy = new Proxy(objectToSpy,handler);
proxy.testProp = 'bla'; //prints: "new prop: testProp"
相关问题