Object|Array.observe() implementation for ECMA 5

Object|Array.observe() implementation for ECMA 5

本文关键字:implementation for ECMA Array observe Object      更新时间:2023-09-26

我发现了新的有用的实验方法(在ECMA 7) ObjectArray: observe。通过文档,您可以订阅ObjectArray中的任何更改。不幸的是,它只能在Chrome 36和Opera 23中使用。

有人知道如何实现其他浏览器的功能(对于支持ECMA 5的浏览器)吗?

可以使用Object.defineProperty

基本上,您可以使用类似于下面的代码重新定义要监视的属性的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