여기 정확히 같은 질문을 묻습니다. define property in constructor하지만 대답이 만족 스럽지는 않다고 생각합니다. 이 코드는 "Object Oriented JavaScript의 원리"라는 책에서 약간의 수정을 통해 질문을보다 명확하게 복사 한 것입니다.생성자, getter 및 setter 메서드의 Object.defineProperty
function Person(xname) {
Object.defineProperty(this, "name", {
get: function() {
return xname;
},
set: function(newName) {
name = newName;
},
configurable: true,
enumerable: true
});
this.sayName = function() {
console.log(this.name);
};
}
var One = new Person("Mark");
One.sayName();
console.log(One.name);
//output:
//Mark
//Mark
이 더 있었다 지역 변수의 사용을 혼란과 같은 이름을 가진 개체 속성 때문에이 매개 변수 이름 XName이을 수정했습니다.
나는이 코드가 의도 한대로 작동하고 있는지 의심 스럽지만 뭔가하는 것처럼 나를 혼란스럽게합니다.
는 나는 "이름"이라는 새로 생성 된 인스턴스의 속성을 만들 생성자 내부 Object.defineProperty 사용하고 있음을 이해합니다.
게터 방법은 XName이를 반환하고 아직 XName이은 줄 끝에서 범위를 간다 : VAR 하나 = 새로운 사람 ("마크"); 나중에 코드 객체에서 어떻게 할 수 있습니까? 하나의 getter가 xname의 값을 반환하는 것을 관리합니까? 그것은 작동해야처럼 이름을 반환 내가 게터 방법을 변경하는 경우 때문에
그리고 엔진은가 정의되지 않은 오류 이름을보고,XName이의 값입니다. (get : function() {return name;})
setter 메서드가 전혀 작동하지 않는다는 것은 말할 필요도 없습니다. One.name = "Mickey"를 코딩하면 One.name은 여전히 "Mark"로 설정됩니다.
xname이 .name에 할당되어 있지 않거나 표시되지만 보이지 않습니다.
* "xname에 매개 변수 이름을 수정했습니다. 왜냐하면 같은 이름의 로컬 변수 및 개체 속성을 사용하는 것이 훨씬 더 혼란 스럽기 때문입니다." . 너는 세터를 놓쳤다. –
\ * has>> * (죄송합니다) * –