2014-07-17 1 views
5

JavaScript는 객체 속성을 가져 오거나 설정하는 두 가지 다른 방법이 있습니까?JavaScript get/set 메소드와 표준 메소드

예 :

//implementation 1 
var obj1 = { 
    "x":1, 
    get number() {return this.x}, 
    set number(n) {this.x = n} 
} 

//implementation 2 
var obj2 = { 
    "x":1, 
    getX: function(){return this.x}, 
    setX: function(n){this.x = n} 
} 

하나의 구현 스타일이 다른보다 이점이 있습니까?

답변

2

두 번째는 일반 ol'javascript 개체의 주된 장점을 가지고 있으며 널리 지원됩니다! 당신이 MDN (getset)에서 볼 수

첫 번째

나는 다음 순간 (두 번째 구현을 권장합니다 (ECMAScript를 5.1) 최근 다음, 특히 IE9 +에서만 지원합니다!) ...

+1

두 방법 모두 완전히 다른 의도이기 때문에 이는 좋은 대답이 아닙니다. "새로운"get/set 방법은 명시 적으로 메소드 ***를 호출하지 않고 해당 속성이 읽기/쓰기 방식으로 액세스 될 때마다이 getter/setter가 호출되도록합니다. 구현 2에서는 이러한 메소드를 명시 적으로 ** 호출해야합니다. 그렇지 않으면 객체 등록 정보를 읽거나 쓸 때 실행되지 않습니다. – connexo

4

일반 메서드와 달리 getset을 사용하면 실제적으로 getter 및 setter 메서드를 배후에서 호출하면서 개체 속성 (= cleaner/lesser 코드)을 직접 조작 할 수 있습니다.

var obj1 = { 
    "x":1, 
    get number() {console.log('get was called'); return this.x}, 
    set number(n) {console.log('set was called'); this.x = n} 
}; 

alert(obj1.number); // calls the getter (and prints to console) 

obj1.number = 10; // calls the setter (and prints to console) 

기타 답변은 언급 한대로 대상 브라우저 세트에 따라 이것을 사용할지 여부를 결정하십시오.

관련 문제