如何检测对象的属性值 onchange 事件?

won*_*ng2 5 javascript

我有这个对象:

var Settings = {  
    color: localStorage.color,  
    size : localStorage.size
};  
Run Code Online (Sandbox Code Playgroud)

我想在更改后自动将新值保存到 localStorage,这意味着我想做这样的事情:

Settings.onchange = function(p){  
    localStorage[p] = this[p];
};  
Run Code Online (Sandbox Code Playgroud)

是否可以?

PS:只需要 Chrome 支持。

won*_*ng2 3

根据@RobG的评论,我编写了这个函数,并且它有效!

function onPropertyChange(o, callback){
    for(var p in o){
        if(o.hasOwnProperty(p)){
            var originalVal = o[p];
            Object.defineProperty(o, p, {
               get: function(){
                   return originalVal;
               },
               set: function(val){
                   callback.call(o, p, val);
                   return originalVal = val;
               }
            });
        }
    }
}  

// example:  

var Settings = {
    color: localStorage.color || "red",
    size : localStorage.size  || "12px"
};

onPropertyChange(Settings, function(p, val){
    localStorage[p] = val;
});  
Run Code Online (Sandbox Code Playgroud)

要点在这里: https: //gist.github.com/1897209