我发现了Object
和Array
observe
的新实用(在ECMA 7中)方法。根据文档,您可以订阅Object
或Array
中的任何更改。不幸的是,它仅适用于Chrome 36和Opera 23.
有人知道如何为其他浏览器实现该功能(对于支持ECMA 5的浏览器)?
感谢任何进步。
答案 0 :(得分:1)
基本上,您使用类似于以下内容的代码重新定义集合并获取要监视的属性的方法:
Object.defineProperty(obj, propertyName, {
configurable: true,
enumerable: true,
set: function(val) {
notifyAll(val); // This is a custom function to notify
// the new value to all the listeners
value = val;
},
get: function() {
return value;
}
});
例如
var obj = {};
Object.defineProperty(obj, 'name', {
configurable: true,
enumerable: true,
set: function(val) {
console.log('Changed name to: ' + val);
value = val;
},
get: function() {
return value;
}
});
obj.name = 'pippo'; // Logs Changed name to pippo
obj.name = 'pluto'; // Logs changed name to pluto
console.log(obj.name); // Logs pluto