ECMA 5的Object | Array.observe()实现

时间:2015-09-01 09:05:58

标签: javascript ecmascript-5 ecmascript-harmony

我发现了ObjectArray observe的新实用(在ECMA 7中)方法。根据文档,您可以订阅ObjectArray中的任何更改。不幸的是,它仅适用于Chrome 36和Opera 23.

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

感谢任何进步。

1 个答案:

答案 0 :(得分:1)

可以使用Object.defineProperty

基本上,您使用类似于以下内容的代码重新定义集合并获取要监视的属性的方法:

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