작성자: anbutu
출처: http://anbutu.javaeye.com/blog/post/194276
키워드: JavaScript Mozilla __defineGetter__ __defineSetter__
Getter는 속성 값을 가져오는 메서드입니다. Setter는 속성의 값을 설정하는 방법입니다. 사전 정의된 핵심 개체 또는 사용자 정의 개체에 대해 getter 및 setter 메서드를 정의하여 기존 개체에 새 속성을 추가할 수 있습니다.
Getter 또는 Setter 메서드를 정의하는 방법에는 두 가지가 있습니다.
객체가 초기화되는 시기 정의
객체가 정의된 후 Object의 __defineGetter__ 및 __defineSetter__ 메서드를 통해 정의를 추가합니다.
객체를 사용할 때 Getter 및 Setter 메서드를 정의하기 위해 초기화 프로세스 중에 수행해야 할 유일한 작업은 getter 메서드 앞에 "get"을 추가하고 setter 메서드 앞에 "set"을 추가하는 것입니다.
또 주목해야 할 점은 getter 메소드에는 매개변수가 없으며 setter 메소드에는 설정할 속성의 새 값인 하나의 매개변수가 있어야 한다는 것입니다.
예:
o = { 🎜> 값:9,
get b() {return this.value;},
set setter(x) {this.value = x;}
}
객체가 정의된 후 객체에 getter 또는 setter 메서드를 추가하려면 __defineGetter__ 및 __defineSetter__라는 두 가지 특수 메서드가 필요합니다. 이 두 함수에서는 첫 번째 매개변수가 문자열로 제공되는 getter 또는 setter의 이름이고 두 번째 매개변수가 getter 또는 setter인 함수여야 합니다.
예를 들어 Date 개체에 연도 속성을 추가합니다.
코드 복사 코드는 다음과 같습니다. 다음은 다음과 같습니다.
Date.prototype.__defineGetter__('연도', function() {return this.getFullYear();})
Date.prototype.__defineSetter__('연도', function( y) {this.setFullYear(y)});
var now = new Date
alert(now.year)
now.year = 2006; ;
어떤 형식을 주로 사용할지는 개인의 프로그래밍 스타일에 따라 다릅니다. 첫 번째 형식은 간결하고 이해하기 쉽습니다. 그러나 객체가 정의된 후에 Getter 또는 Setter를 추가하려는 경우 또는 이 객체의 프로토타입이 사용자가 작성한 것이 아니거나 내장 객체인 경우에는 두 번째 방법을 사용해야 합니다.
다음은 Mozilla 브라우저에 innerText 속성을 추가하는 구현입니다.
HTMLElement.prototype.__defineGetter__ 읽을 수 있습니다 이제! Contents(this)
/ /객체 노드의 콘텐츠만 가져옵니다
return texturing.tostring () ;
// 노드 내용의 값을 innertext에 제공
}
)