2013-04-22 3 views
0

프로토 타입의 속성 중 하나가 객체가 될 간단한 Person 객체를 만들려고하지만 범위가 변경 되었기 때문에 가능하지 않습니다.Javascript 프로토 타입 속성이 객체로 정의되었습니다.

var Person = function() {}; 

Person.prototype.set = function(data) { 
    this.data = data; 
}; 

Person.prototype.update = { 
    name: function(name) { 
     this.data.name = name; 
    } 
}; 

var me = new Person(); 
me.set({name: 'Achilleas'}); 
me.update.name('John'); 

또한이 jsFiddle

에서 실행할 수 있습니다 내가 할 수 달성 할 무엇인가? 내가 범위를 할당하는 데 적용을 사용하여 그것을 할 수 있지만, 정말이 솔루션을 좋아하지 않아.

Stackoverflow에 대한 첫 번째 질문에 시간을내어 보내 주셔서 감사합니다.

답변

1

this은 생성되어 update 속성에 할당 된 개체 리터럴을 참조하기 때문에 발생한 문제입니다. 그것은 사람을 말하는 것이 아닙니다. 따라서 this.data.name을 참조하면 개체 리터럴에 데이터 속성이 없기 때문에 오류가 발생합니다.

Person 프로토 타입을 확장하여 업데이트 할 속성과 값을 사용하는 업데이트 메서드를 포함하는 것이 좋습니다. 또한 사람의 재산으로 data을 추가하십시오.

var Person = function() { 
    this.data = {}; 
}; 

Person.prototype.set = function(data) { 
    this.data = data; 
}; 

Person.prototype.update = function(property, value){ 
    this.data[property] = value; 
}; 

var me = new Person(); 
me.set({name: 'Achilleas'}); 
me.update('name','John'); 

작업 예http://jsfiddle.net/fj5uY/7/

+0

그래, 나뿐만 아니라 해당 솔루션 알고 있어요. 그러나 문제는 적용 또는 호출을 사용하지 않고 me.update.name ('John')을 작동시킬 수 있는지 여부입니다. – Knorcedger

관련 문제