2014-07-11 7 views
3

defineProperty 호출 내에서 정의한 값에 액세스 할 수 있습니까? 다음과 같이 만들려는 것입니다 :defineProperty 내부 getter에서 액세스 값

Object.defineProperty(this, 'name', { 
    value: 'Caaaarl', 
    get: function() { return <the value>; }, 
    set: function(x) { <the value> = x; } 
}); 

현재 각 속성에 대해 두 번째 속성을 만들어야합니다.

var _name = ''; 

Object.defineProperty(this, 'name', { 
    get: function() { return _name; }, 
    set: function(x) { _name = x; } 
}); 

모든 도움에 감사드립니다!

답변

2

모두 value 및 속성 설명자의 필드는 get 또는 set입니다.

당신은 getter와 네임 스페이스를 오염없이 단순히 속성을 설정하는 것보다 더 많은 일을 할 세터와 더 복잡한 속성을 사용하려면, 당신은 폐쇄의 기본 값을 보유 할 수 있습니다 :

(function() { 
    var value = 'Caaarl'; 

    Object.defineProperty(this, 'name', { 
     get: function() { 
      // do some stuff 
      ... 
      return value; 
     }, 
     set: function(v) { 
      // do some stuff 
      ... 
      value = v; 
     }, 
     writable: true, 
     enumerable: true 
    }); 
}).call(this); 
0

그냥 간단한 속성을 만들려고 노력하고 가정, 당신은 그냥 쓰기가되고 싶어요 : 당신이 할

this.name = 'Carl'; 
0

:

Object.defineProperty(this, 'name', { 
    value: 'Caaaarl', 
    writable: true 
}); 

그런 다음 당신이 값을 변경하려면이 작업을 수행 할 수 있습니다 setter 및 getter를 사용자 정의하지 않은 경우 다시 작성하지 않아도됩니다.

이 당신이 official way이다 (당신이하고있는 것처럼) 세터와 게터, 변수 범위 지정을 사용자 정의해야하는 경우 기본 Caarl

Object.defineProperty(this, 'name', { 
    value: 'Caaarl' 
}); 

으로 "이름"속성과 세트를 만들 수 있습니다. 그런데

, 당신이 가진 객체를 참조 할 수 있습니다 :

var a = {}; 
Object.defineProperty(a, 'random', { 
    get: function() { return 'Getter -> ' + this._random; }, 
    set: function(x) { this._random = 'Setter -> ' + x; } 
}); 

그래서 기본은 간단 할 수 있기 :이 법적 아니다

var a = {_random: 'default'}; 
console.log(a.random); //undefined 
Object.defineProperty(a, 'random', { 
    get: function() { return 'Getter -> ' + this._random; }, 
    set: function(x) { this._random = 'Setter -> ' + x; } 
}); 
console.log(a.random);//undefined but getting custom getter 
a.random = 'daniel'; 
console.log(a.random);//sweet