我正在尝试修改原型,以允许使用字符串比较Object
监视整个对象(而不仅仅是像 with 之类的属性)的更改。Object.watch
以下是我到目前为止所拥有的,只要我myobj.change(...)
在每次修改后调用它就可以工作。
我希望完成的是一种.change()
在每次修改对象时将其“重新绑定”到对象的方法,这样我就可以设置一个更改处理程序,该处理程序在对象被操作时做出响应。
if (!Object.prototype.change) {
Object.defineProperty(Object.prototype, "change", {
value: function(handler) {
var curVal = JSON.stringify(this);
console.log('CUR:',curVal);
console.log('STATE:', this.__proto__.state);
if (curVal!==this.__proto__.state) {
this.__proto__.state = JSON.stringify(this);
handler.call(this);
}
}
});
}
var myobj = { foo: 'bar' };
myobj.change(function(){
console.log('Changed!');
});
myobj = { foo: 'qux' };
myobj.change(function(){
console.log('Changed!');
});
myobj = { foo: 'sit' };
myobj.change(function(){
console.log('Changed!');
});
小提琴在这里:http: //jsfiddle.net/fluidbyte/GE9t3/