ECMA 5 的对象|Array.observe() 实现
Object|Array.observe() implementation for ECMA 5
我为 Object
和 Array
找到了新的有用的实验方法(在 ECMA 7 中):observe
。通过文档,您可以订阅 Object
或 Array
中的任何更改。不幸的是,它仅在 Chrome 36 和 Opera 23 中可用。
有人知道如何为其他浏览器(支持 ECMA 5 的浏览器)实现该功能吗?
感谢任何预付款。
基本上,您可以使用类似于以下的代码重新定义要监视的 属性 的 set 和 get 方法:
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
我为 Object
和 Array
找到了新的有用的实验方法(在 ECMA 7 中):observe
。通过文档,您可以订阅 Object
或 Array
中的任何更改。不幸的是,它仅在 Chrome 36 和 Opera 23 中可用。
有人知道如何为其他浏览器(支持 ECMA 5 的浏览器)实现该功能吗?
感谢任何预付款。
基本上,您可以使用类似于以下的代码重新定义要监视的 属性 的 set 和 get 方法:
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