ECMA 5 的对象|Array.observe() 实现

Object|Array.observe() implementation for ECMA 5

我为 ObjectArray 找到了新的有用的实验方法(在 ECMA 7 中):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