使用内置javascript对象的简单示例: navigator.my_new_property =“有些价值”; //我们可以检测到这个新属性已被添加吗?
我不想经常轮询对象以检查新属性。 是否有某种类型的更高级别的对象设置器而不是显式声明要监视的属性?
同样,我不想检测属性值是否更改,而是在添加新属性时。
想法? 感谢
答案 0 :(得分:6)
不。确定何时写入属性的现有方法:
defineProperty(obj, name, fn)
; __defineSetter__(name, fn)
; watch(name, fn)
; 都是基于名称的,因此无法捕获使用以前未知名称编写的新属性。在任何情况下,navigator
都可能是“主机对象”,因此您不能依赖其上可用的任何普通JavaScript Object
接口。
提供回调的轮询或显式setter方法就是你所能做的一切。
答案 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"