>  기사  >  웹 프론트엔드  >  javascript_javascript 기술의 __defineGetter__ 및 __defineSetter__ 소개

javascript_javascript 기술의 __defineGetter__ 및 __defineSetter__ 소개

WBOY
WBOY원래의
2016-05-16 16:39:421599검색

Getter는 속성값을 가져오는 메소드이고, Setter는 속성값을 설정하는 메소드입니다. 사전 정의된 핵심 개체 또는 사용자 정의 개체에 대해 getter 및 setter 메서드를 정의하여 기존 개체에 새 속성을 추가할 수 있습니다.

Getter 또는 Setter 메서드를 정의하는 방법에는 두 가지가 있습니다.

1. 객체 초기화 중
을 정의합니다. 2. 객체가 정의된 후 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 = 새 날짜
경고(현재.연도)
지금.연도 = 2006
알림(현재);

주로 사용할 양식은 개인 프로그래밍 스타일에 따라 다릅니다. 첫 번째 양식은 간결하고 이해하기 쉽습니다. 그러나 객체가 정의된 후에 Getter 또는 Setter를 추가하려는 경우 또는 이 객체의 프로토타입이 사용자가 작성한 것이 아니거나 내장 객체인 경우에는 두 번째 방법을 사용해야 합니다.

다음은 Mozilla 브라우저에 innerText 속성을 추가하는 구현입니다.

코드 복사 코드는 다음과 같습니다.

HTMLElement.prototype.__defineGetter__
(
"innerText",함수()
//innerText의 값을 가져오는 getter 메소드를 정의합니다.
//이제 읽을 수 있습니다!
~           var textRange = this.ownerDocument.createRange();   //범위를 사용하여 객체의 내용을 검색합니다
             textRange.selectNodeContents(this)
//객체 노드의 내용만 가져옵니다
              return textRange.toString()
// innerText에 노드 콘텐츠의 값을 제공합니다.
}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.