2011-03-04 5 views

답변

1

당신은 할 수있다 (the ECMAScript5 specification의 새로운) 언어의 새로 표준화 된 부분 인 속성 setter 통해. 그것은 오래된 변수 나 속성이 아니라 객체에 대한 setter로 정의 된 속성에서만 작동합니다. 단지 구글 크롬에있다

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,하지만 내가 생각 ECMAScript5 속성을 지원하는 브라우저에서 작동 : 여기

는 게터와 세터 모두와 foo 속성 오브젝트의 예 순간

물론, 속성보다는 getter 및 setter 함수를 직접 사용하십시오. :-)

2

단순 : 프리미티브 변수를 사용하지 말고 값을 변경하는 "setter"메서드가있는 객체를 사용하십시오. setter에서 추가 코드를 호출 할 수 있습니다.

+0

가 유 예를 게재 할 수 있습니까? – 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 :

checkVariable(myVar) 3 초마다 실행된다
var myVar = 0; 

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

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

.

+0

예제를 보여줄 수 있습니까? – TRAVA

1

@ T.J. 나는 @Aaron이 같은 무언가를 객체를 제안 생각 : 감시

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

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

은 업데이트 한 말을 콜백을 발사 방법으로 업데이트되는 내부 값을 유지한다.

편집 :

좋아 어쩌면 @Aaron이 :)

내가 마음에이 같은 매우 간단한 일을했다

생각하지 무엇을 :

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

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

    // return public methods 
    return { add: add }; 
} 
관련 문제