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

UIC*_*des 9 javascript properties object

使用内置javascript对象的简单示例:navigator.my_new_property ="some value"; //我们可以检测到这个新属性被添加了吗?

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

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

想法?谢谢

bob*_*nce 7

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

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

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

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

类似情况:javascript数组上的getter/setter?


kun*_*aba 5

ES6 引入了 Proxies 的概念: es6 proxies on MDN

这是一个简单的例子:

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"
Run Code Online (Sandbox Code Playgroud)