【发布时间】:2013-04-20 16:34:36
【问题描述】:
我正在尝试修改Object 原型,以允许使用字符串比较来监视整个对象(不仅仅是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!');
});
【问题讨论】:
-
您的问题有点令人困惑,因为如果不监视对象属性的更改,什么是“监视整个对象的更改”?您是否希望监控对所有属性的更改?
标签: javascript object prototype