다음은 작동하지 않습니다. getter에서 'class'Person에 _nickname
이 정의되어 있지 않습니다.Object.DefineProperty 사용 및 개인 범위의 변수 액세스
어떻게해야합니까? 함수 내에서 Person의 프로토 타입에 _nickname을 추가하는 방법이 있습니까?
다음은 작동하지 않습니다. getter에서 'class'Person에 _nickname
이 정의되어 있지 않습니다.Object.DefineProperty 사용 및 개인 범위의 변수 액세스
어떻게해야합니까? 함수 내에서 Person의 프로토 타입에 _nickname을 추가하는 방법이 있습니까?
함수 내에서 Person의 프로토 타입에 _nickname을 추가하는 방법이 있습니까? 당신이 (내 생각에 그것은 매우 우아 보이지 않지만), 확인
Person
생성자 의미하는 경우
:이 경우
var Person = function (args) {
var _nickname = '';
if (args === undefined || args === null) {
return;
}
if (args.nickname !== undefined && args.nickname !== null) {
_nickname = args.nickname;
}
Object.defineProperty(this, "nickname", {
get : function() {
return _nickname;
}
});
}
var x = new Person({
nickname : 'bob'
});
console.log(x.nickname);
를, 당신의 게터는 또 다른 클로저입니다 따라서 _nickname
에 액세스 할 수 있습니다. 그리고 프로토 타입에 더 이상 있지 않아요, 당신은 그것을 달성하기 위해 자신의 속성이 필요합니다.
하지만 'new Person()'을 실행할 때마다 Object.defineProperty가 실행되지 않습니다. ? 아니면 그다지 큰 문제가 아닌가? 그것이 내가 피하고 싶었던 것입니다. – Matt
있습니다. 그러나 생성자에서 실행하지 않으면 결코'_nickname'에 액세스 할 수 없습니다. – bfavaretto
@Matt 당신이 정말로 개인적인 것이 아니라면 괜찮을 것입니다.'this._nickname'을 사용할 수 있습니다. (또한 쓰기 가능 : false로 설정할 수 있기 때문에 생성자에서 설정 한 값을 절대로 변경할 수 없습니다). http://jsfiddle.net/669Gb/ – bfavaretto
빠른 팁 :'args === undefined || args === null'은'args == null'과 동일합니다. 왜냐하면'null == undefined'이기 때문입니다. 다른 비교와 같은 것. – elclanrs
아, 나는 JsLint에 대해 까다 롭다. 그는 ==을 좋아하지 않는다. 나는 그것을 바로 잡았다. 나는 너무 조심 스러울 지 모르겠다. 그러나 나는 JS 폐쇄가 그것을 돌볼 수 있기를 바랐다 :-) – Matt
JSHint는 나의 차 잔이다. 이 특별한 경우를위한 옵션이 있습니다 : [eqnull] (http://www.jshint.com/docs/options/#eqnull) – elclanrs