2012-02-24 17 views
4

私はこのオブジェクトを持っている:オブジェクトのプロパティ値の変更イベントを検出するにはどうすればよいですか?

var Settings = { 
    color: localStorage.color, 
    size : localStorage.size 
}; 

私はこのような何かをしたいということ、それらが変更されると、自動的にのlocalStorageに新しい値を保存したいと思います:

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

出来ますか?

PS:Chromeサポートのみが必要です。

+0

あなたはそれぞれのプロパティを書くことで大丈夫か? – Ryan

+1

それは可能ではありません(まあ、ES5ゲッタとセッタを使用することができます)。データのカプセル化を組み込み、 'set(key、value)'のようなプロパティを設定し、その関数内で同期を処理するメソッドを使うことを提案します。 –

+2

Javascript [setters and getters](http://robertnyman.com/2009/05/28/getter-and-setters-with-javascript-code-samples-and-demos/)はあなたの答えです(ただし、それらをサポートする)。 – RobG

答えて

2

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

ここ要旨:https://gist.github.com/1897209

+0

これは、既に設定されているプロパティのモニタリングを行うことができます。新しいプロパティが 'Settings'に追加されたときにコールバックを行うのはどうでしょうか? –

関連する問題