2016-07-14 2 views
1

나는 this article에 대한 constructor 속성을 읽고 있어요 있으며 다음 상태 :MDN constructor 속성 설명 혼란

인스턴스의 프로토 타입을 만든 개체 함수에 대한 참조를 반환합니다. 여기

function Tree(name) { 
    this.name = name; 
} 

var theTree = new Tree('Redwood'); 
console.log('theTree.constructor is ' + theTree.constructor); 

인스턴스가 theTree하고 프로토 타입이 Object.getPrototypeOf(theTree)이며, 개체 기능하지 Tree입니다 :

는 그리고 그들은 예를 제공합니다. 내가 오해하니?

+0

글쎄,'Tree' *는 "Object function"입니다. 이름이 해석되어'Tree' 또는이 일반 "Object function"으로 표시되는지 여부는 디버깅 환경/브라우저의 세부 사항에 달려 있습니다. – deceze

+0

@deceze하지만'Tree'는'theTree'의 프로토 타입을 만들지 않았고 인스턴스를 만들었습니다. 이것은 혼란스러운 부분입니다. –

+0

'console.log()'에서 문자열에 내용을 던지지 마십시오. 중요한 내용을 숨 깁니다. –

답변

2

객체의 프로토 타입은 일반적 생성자 함수로부터 상속된다

function Tree() {} 
Tree.prototype.foo = function() {}; 

var theTree = new Tree(); 

theTree는 이제 prototype 체인에서 theTree.foo있다. function Tree은 객체를 초기화했으며 프로토 타입 체인의 내용도 담당합니다. 그래서 그들은 "인스턴스의 프로토 타입을 만든 Object 함수"로 표현합니다..

+0

고마워. 고마워. 그래서 기본적으로'constructor' 속성은 객체의 프로토 타입이 어디서 왔는지를 발견 한 다음 객체를 만드는 데 사용 된 함수를 이해하는 것과 더 관련이 있습니다. –

+0

나는 MDN이 그 문장을보다 직접적인 방법으로 쓸 수 있을지에 대해 다소 논쟁의 여지가 있다고 생각한다. '.constructor'가 "더 관련성이있는"것은 당신이 그것을 사용하기를 원하는 것에 달려 있습니다. 솔직히 말해서 지금까지 아무 것도 사용하지 않아도 돼서 그런 말을 할 수있는 최고의 위치에 있지 않습니다. – deceze

+0

고마워요. 이 프로토 타입은'theTree instanceof Tree'와 같은 상속 체크에서 사용될 수 있고,'Tree'가'theTree'의 프로토 타입을 생성했다면'Tree.prototype'은'theTree '프로토 타입 체인. 가정이 충분하다고 생각하십니까? –

0

Object.getPrototypeOf (theTree는)

Object.getPrototypeOf(theTree) == Tree.prototype; // true 

가 같은 객체를 참조하여 트리 함수의 프로토 타입입니다

그리고 Tree.prototype은을 가리키고 참조입니다 '생성자'라는 이름의 속성이 있습니다 트리 기능은

theTree.contructor == Tree.prototype.constructor ;// true 

는 기본적으로 theTree는 프로토 링크 (____proto____)과 Tree.prototype이 프로토 링크 포인트가 있습니다. 그래서 Tree.constructor를 할 때 proto 링크를 실제로 따라 Tree.prototype에 도달하여 생성자를 찾습니다. 트리 함수