你可以通过使用getter和setter来实现这一点。
var obj = {
get foo() {
console.log({ name: 'foo', object: obj, type: 'get' });
return obj._foo;
},
set bar(val) {
console.log({ name: 'bar', object: obj, type: 'set', oldValue: obj._bar });
return obj._bar = val;
}
};
obj.bar = 2;
obj.foo;
或者,如果您使用支持代理的浏览器,您可以编写一个更通用的解决方案。
var obj = {
foo: 1,
bar: 2
};
var proxied = new Proxy(obj, {
get: function(target, prop) {
console.log({ type: 'get', target, prop });
return Reflect.get(target, prop);
},
set: function(target, prop, value) {
console.log({ type: 'set', target, prop, value });
return Reflect.set(target, prop, value);
}
});
proxied.bar = 2;
proxied.foo;
Proxy()
了! - JaiObject.observe
,代理和getter/setter非常有限。我希望它没有被弃用。 - trusktr