Javascript 如何在对象的更改事件中检测属性值?

Javascript 如何在对象的更改事件中检测属性值?,javascript,Javascript,我有一个目标: var Settings = { color: localStorage.color, size : localStorage.size }; 我希望在更改新值后自动将其保存到localStorage,这意味着我希望执行以下操作: Settings.onchange = function(p){ localStorage[p] = this[p]; }; 可能吗 PS:只需要Chrome支持。根据@RobG的评论,我编写了这个函数,

我有一个目标:

var Settings = {  
    color: localStorage.color,  
    size : localStorage.size
};  
我希望在更改新值后自动将其保存到localStorage,这意味着我希望执行以下操作:

Settings.onchange = function(p){  
    localStorage[p] = this[p];
};  
可能吗


PS:只需要Chrome支持。

根据@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;
});  

要点:

您可以为每个属性编写一个属性吗?这是不可能的(我想您可以使用ES5 getter和setter)。我建议合并数据封装,并使用一种方法来设置属性,例如
set(key,value)
,并在该函数中处理同步。Javascript是您的答案(但仅适用于支持它们的浏览器)。@minitech我最好不要在将来正确地拥有其他属性,getter和setter在Chrome 5+中工作。这可以监视已经设置的属性,在
设置中添加新属性时进行回调怎么样?