2015-01-08 6 views
4

코드에 하나의 생성자 함수가 있습니다. 그 생성자의 인스턴스를 생성했습니다. 새로 생성 된 인스턴스에서 프로토 타입 메서드를 사용하여 값이나 함수를 추가하고 싶습니다. 하지만이 일을하는 동안 나는 오류가 발생했습니다. 여기 그것은 생성자 함수의 프로토 타입이어야한다 fiddle함수 인스턴스에서 프로토 타입을 사용하여 값 추가

function a(){ 
this.d=9 
} 
a.prototype.one=1; 
a.prototype.two=2; 


var j= new a(); 
j.prototype.three=3; 

console.log(j) 
+0

'에서 새로 생성 된 인스턴스

j.three=3; 

또는 a.prototype.three = 3;

바이올린을 시도 할 수있다 나는 프로토 타입 방법을 사용하여 가치 또는 기능을 추가하고 싶다. "- 왜? – thefourtheye

+0

Function 개체의 기본 * prototype * 속성과 내부 ['[[Prototype]]'] (http://ecma-international.org/ecma-262/5.1/#sec-8.6.2) 사이에 혼동을 느낍니다. 생성자의 [* prototype *] (http://ecma-international.org/ecma-262/5.1/#sec-15.3.5.2)를 참조하는 상속에 사용되는 모든 객체 중 하나입니다. – RobG

+0

@RobG : 당신이 맞다고 생각합니다. – Carlos

답변

4

내 코드가 아닌 객체는이 함수를 생성합니다

a.prototype.three = 3; 

당신은 prototype 키를 사용하여 객체의 프로토 타입에 액세스 할 수 없습니다 프로토 타입 있기 때문에 참조가 노출되지 않습니다. 그래도 __proto__ 속성을 사용하여이 작업을 수행 할 수 있지만 더 이상 사용되지 않습니다. 당신은 객체의 프로토 타입을 얻을 필요가있는 경우 사용 Object.getPrototypeOf 방법을 만들 수 있습니다

Object.getPrototypeOf(j) === a.prototype; // true 

단어가 "프로토 타입"종류의 두 가지를 의미하기 때문에 여기에 약간의 혼란. 함수 프로토 타입은 함수가 생성자처럼 사용될 때 새 객체가 생성 될 때 사용되는 객체입니다. 객체 프로토 타입은 상속 된 메소드를 저장하는 객체에 대한 참조입니다.

1

JJ의 프로토 타입은 정의되어 있지 않으므로 직접 액세스 할 수 없으므로 속성 3을 프로토 타입 j에 직접 설정할 수 없습니다. 당신이 j'의 프로토 타입 a'의 prorotype에 속성을 추가 할 수 있지만 할 수있는 이유

이, 당신은 http://jsfiddle.net/s4g2n453/4/

관련 문제