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+中工作。这可以监视已经设置的属性,在设置中添加新属性时进行回调怎么样?