2016-06-14 4 views
16

에 게터를 추가하는 방법이자바 스크립트 : 기존 개체

var member = { 
    firstName:"XYZ", 
    lastName:"zzz", 
    get fullName(){ return (this.firstName + ' ' + this.lastName); } 
} 

같은 자바 스크립트 객체에 게터를 가질 수 있습니다 그리고 난이

member.isGuest = true; 

처럼 즉석에서 더 많은 속성을 추가하지만입니다 수 있습니다 우리는 이미 존재하는 객체에 getter를 추가 할 수있는 방법이 있습니까? 당신이 __defineGetter__을 사용했다 과거에는

Object.defineProperty(
    member, 
    'prop', 
    { 
     get: function() { 
      return this.lastName.toUpperCase() 
     } 
    } 
); 

을하지만 지금은 사용되지 않습니다 :이

member.isGuest = get isGuest(){ return this.firstName=='Guest'; } 

답변

20

같은 뭔가 defineProperty

Object.defineProperty(member, 'isGuest', { 
    get: function() { return this.firstName=='Guest' } 
}); 
7

당신은 새로운 Object.defineProperty이 방법을 사용할 수 있습니다보십시오.

+0

FGITW 실패에 대해 upvote를 사용할 자격이 있습니다. (실제로 더 많은 콘텐츠가 있습니다!) – wizzwizz4

-3

클래스에서 get 및 set 만 사용할 수 있습니다. 이는 getter 및 setter 메서드를 의미합니다. 클래스에 함수를 추가 할 수 있습니다.

member.isGuest = function isGuest(){ return this.firstName=='Guest';} 

member.isGuest() 

get은 해당 속성을 읽을 수 있음을 의미합니다. 집합은 속성을 쓸 수 있음을 의미합니다! "JavaScript : The.Definitive.Guide"책에서 볼 수 있습니다. 6301 6 장!

+0

이것은 분명히 잘못되었습니다. 익명 객체에'get'과'set'을 사용할 수 있습니다. 'let obj = {get foo() {return 'foo'}}'와 비슷합니다. 첫 번째 예제는 다음을 참조하십시오. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get – tandrewnichols

0

또한 사용자 정의 게터를 추가하고 다른 값으로 계산되지 않아야하는 경우 이전 값을 보존 할 수 있습니다. 당신의보기에서와 같이. 이렇게하려면 다음과 같은 다른 함수를 사용하여 추가 컨텍스트 레이어를 만드십시오.

(function(){ 
    var oldValue = yourObject[targetProperty]; 
    var currentValue = oldValue; 
    var getter = function() { 
     return currentValue; // or do something before returning, like applying parseInt or whatever 
    }; 
    var setter = function(newValue) { 
     currentValue = newValue; // or add some customization as well 
    }; 
    Object.defineProperty(yourObject,targetProperty,{ 
     get: getter, 
     set: setter, 
     enumerable: true, // depending on your needs 
     configurable: true // depending on your needs 
    }); 
})();