2011-03-04 5 views

答えて

1

プロパティセッター(これは新しく標準化された言語の一部です(the ECMAScript5 specificationから新規)を使用して行うことができます。これは、オブジェクト上のセッターで定義されたプロパティに対してのみ機能し、古い変数やプロパティでは機能しません。ここで

はgetterとsetterの両方でfooプロパティを持つオブジェクトの例です:

var obj = {}; 
Object.defineProperty(obj, "foo", (function(){ 
    var value = 42; 

    function fooGet() { 
    display("Getting: " + value); 
    return value; 
    } 
    function fooSet(newValue) { 
    display("Setting: " + newValue); 
    value = newValue; 
    } 

    return { 
    get: fooGet, 
    set: fooSet 
    }; 
})()); 

Live exampleが、唯一の私はでちょうどGoogle Chromeのだと思うECMAScript5プロパティをサポートするブラウザ上で動作します瞬間

もちろん、プロパティではなくゲッターとセッター関数を直接使用してください。 :-)

2

単純:プリミティブ変数を使用せず、値を変更するための「セッター」メソッドを持つオブジェクトを使用します。セッターでは、追加のコードを呼び出すことができます。

+0

Uは一例を示しすることはできますか? – TRAVA

+0

http:// stackoverflowを参照してください。com/questions/1759987/detect-variable-change-in-javascript for code。 –

2

これはプリミティブでは実行できません。可能な唯一の方法は、変数をオブジェクトにカプセル化し、このオブジェクトにカスタムイベントを追加した場合です。

+0

例を表示できますか? – TRAVA

1

setIntervalメソッドを使用すると、定期的に変数の値をチェックして、必要な場合は自分のものを実行できます。

しかし、それは良い解決策ではありません。他の提案が良いです。

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

EDIT:

var myVar = 0; 

var intervalId = setInterval('checkVariable(myVar);', 3000); 

function checkVariable(theVar) { 
    if (theVar == 1) { 
     alert('Variable is 1.'); 
    } 
} 

checkVariable(myVar) 3秒ごとに実行されます。

+0

例を表示できますか? – TRAVA

1

@ T.J。私は@Aaronはこのような何かを行うオブジェクトを示唆していると思う:Newランキング

var myVar = new Watched(1, function (newValue) { alert(newValue) }); 

myVar.add(2); // alert(3); 
myVar.add(10); // alert(13) 

は、彼らが更新されていると言って、コールバックを発射方法によって更新された内部値を保持します。

EDITED:多分

OKではない@Aaronが:)

を考えていた私は心の中でこのような非常にシンプルなものを持っていた:

function Watched (initVal, cb) { 
    var value = initVal; 

    function add (val) { 
     value += val; 
     cb(value); 
    } 

    // return public methods 
    return { add: add }; 
}