2010-08-12 1 views
1

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Object/watch자바 스크립트 : 객체의 모든 속성에 대한 모질라 .watch() 기능 (아마도 크로스 브라우저)

.watch() 메소드는 한마디로이 작업을 수행 : "속성에 대한 시계는 값을 할당 할 수 그럴 때 기능을 실행합니다. "

긴 설명 형식 : "이 객체에서 prop라는 속성에 대한 할당을 감시하고 prop가 설정 될 때마다 handler (prop, oldval, newval)를 호출하고 반환 값을 해당 속성에 저장합니다.) 수정 된 newval을 반환하거나 (또는 ​​oldval을 반환하여) 값 할당. " 내가 그와 비슷한 뭔가를 찾고 있어요 Object.watch() for all browsers?

: 그것은 여기에 모든 브라우저에서 작동하도록 점점에 대한 질문이 있습니다

. 내가 찾고있는이 사양에 맞게 사용할 수있는 방법입니다 : "이 개체의 모든 속성에 할당을 감시하고 발생하면 함수를 실행합니다." 주요 차이점은 모든 속성 및 특정 속성뿐입니다.

누군가가 그러한 방법을 만들 수 있습니까? 아니면 그러한 방법이 이미 존재한다는 것을 알고 있다면 링크 할 수 있습니까? 모든 브라우저에서 작동하도록하는 것이 유용 할 것입니다 (IE9를 준수하는 경우 IE 빼기 IE8)

편집 : 내가 원하는 것을 보여줍니다.

var DiscreteLine = function (leftBound, length){ 
    this.positive = []; 
    this.negative = []; 
    this.length = length; 
    this.leftBound = leftBound; 
    this.rightBound = leftBound + length 

    if (this.leftBound < 0){ 
    this.negative.length = (leftBound * -1) + 1; 
    } else { 
    this.negative.length = 0; 
    } 
    if (this.rightBound >= 0){ 
    this.positive.length = rightBound + 1; 
    } else { 
    this.positive.length = 0; 
    } 

    this.watchObject = new ObjectWatcher(handler(prop, oldval, newval){ /* some stuff */ }); 

} 

그런 다음, 누군가가 그랬다면, 예를 들어, 다음과 같은 경우 :

theLine = new DiscreteLine(-2, 4); 
theLine[-8] = 10; 

핸들러는 인수 ("-8"정의되지 않은, 10)와, 부를 것이다. (결국 Array가 자동으로 length 속성을 업데이트하는 방식과 같이 스크립트가 leftBound 및 length 속성을 자동으로 다시 계산한다는 것입니다.)

답변

0

기본적으로 이미 정의 된 객체의 속성에 대해 setter를 재정의해야합니다. 내가 아는 한, 이것은 ECMAScript 5에서만 가능하며 (Object.defineProperty을 통해), 현재 어떤 브라우저가 이것을 지원하는지 모르겠다. 그렇다면 당신이 가진 것처럼 "크로스 브라우저"가되지는 않을 것이다. 질문 :

편집 : 예 : 귀하의 예는 귀하의 요구 사항을 분명히합니다. 언어가 새로운 속성이 개체에 추가 될 때 알림 방법이 제공되지 않습니다. 예를 들어, 선택의 여지가있다. e xcept를 사용하여 배열 표기법을 함수 호출로 바꿉니다.

+0

그 방법을 사용하여 개체의 모든 속성에 대한 감시자를 만드는 방법을 알 수 없습니다. 또한 Firefox 4.0에서 지원합니다. 그것은 속성의 주요 측면 (어쨌든 나에게 유용)을 변경할 수는 있지만 오브젝트를 보지는 않습니다. – Havvy

관련 문제