2011-07-17 10 views
2

私は以前に作成したオブジェクトを持っています。オブジェクトアクセスの火災イベント

この子オブジェクトが変更されるたびに機能を起動したいと考えています。

例:

function changed() 
{ 
    alert('Object changed';) 
} 

obj.test = 'blabla'; //fire changed(). 

これは可能ですか?ありがとうございます

答えて

1

はい、いいえ。あなたが探しているのはaccessors and mutators(ゲッターとセッターとも呼ばれます)ですが、残念ながらクロスブラウザとは互換性がありません。もちろん、

function check(key, context, callback) 
{ 
    var cachedValue; 
    cachedValue = context[key]; 
    function doCheck() 
    { 
    if (cachedValue != context[key]) callback(); 
    setTimeout(doCheck, 100); 
    } 
    doCheck(); 
} 

check('test', obj, testChanged); 

これは、非常に:あなただけの値が変更されたことに気づく必要があり、遅延が問題にされていない場合

、あなたはポーリングの値をタイムアウトループを使用することができますポーリングループがどのように機能するかの簡単な例。これを行うためのより良い方法があります。

+0

迅速な回答と大きな助けをありがとう! – louis

1

互換性の理由から、Javascriptゲッター/セッター(これはかなり新しく、2009年にECMA-262の第5版に追加されています)を使用したい場合は、おそらく、コンテクストが許せば、代わりにセッター関数:

この機能するためには

setVariable(value)

、あなたのコードは、代わりにプロパティを設定するこれらの関数を呼び出すように更新しなければならないであろう。

私は、外部ライブラリ(または他のコード)がプロパティを更新している場合、これが可能でないことを理解します。非同期通知で十分であれば(もちろん、中間の値、つまり間隔の間に設定された値を通知することができない)限り、提案されているポーリング手法は他にも良い解決策です。

関連する問題