2012-05-30 5 views
9

저는 JavaScript를 매우 새로 도입했습니다. JavaScript에서 좋은 부분을 읽었습니다. 그것은 말한다 :함수 프로토 타입이 반복적으로 연결된 이유는 무엇입니까?

function test() { 
} 

console.log(test.prototype); 

가 크롬의 개발자 도구를 사용하여, I 출력을 찾을 : 모든 함수 객체는 또한 프로토 타입 재산

이런 식으로 뭔가 그래서 않았다 생성됩니다

다음과 같습니다 :

enter image description here

정말이 출력과 혼동 스럽습니다. constructorprototype 속성이 다시 constructor으로 중첩 된 이유는 무엇입니까? 그리고 이것이 체인과 같은 이유는 무엇입니까? 내가 그 개념을 어디에서 놓치고 있니?

미리 감사드립니다.

답변

9

prototype 함수의 속성은 new 연산자로 생성 될 때 해당 함수의 모든 인스턴스가 상속되는 개체를 보유합니다. 그리고이 프로토 타입 객체 (일반적으로)는 모두 constructor 속성을가집니다. 여기에는 순환 참조가 있습니다. 따라서 new test()이 해당 속성을 상속하므로 (new test).constructor === testtrue으로 평가됩니다.

함수 객체의 속성 인 prototype과 객체가 상속하는 프로토 타입 객체 ("[[prototype]] 내부 속성"이라고도 함)를 구별해야합니다.

생성자는 Function이 아닌 함수이며 둘 다 있습니다. 따라서 Function.prototype 개체에서 상속받습니다. 여기서 constructor 속성은 모든 함수가 Function 생성자에 의해 구성된다고 말합니다. 개발자 콘솔에 Function 개체의 프로토 타입이 표시되면이를 볼 수 있습니다. 나는 설정에 옵션이 있다고 생각한다.

그래서 유명한 "프로토 타입 체인"는 constructor 및/또는 prototype 속성에 대한 것이 아니라 그 객체에서 상속되는 프로토 타입 객체에 대한 :

function test() {}    new test() 
    (a Function)    (a test instance) 
     ||       || 
     ||       || 
     \/       \/ 
Function.prototype   test.prototype 
(a Function, by spec)   (an Object) 
     ||       || 
     ||       || 
     \/       \/ 
Object.prototype    Object.prototype 
     ||       || 
     ||       || 
     \/       \/ 
     null       null 
+0

콘솔에서'Object.getPrototypeOf (test)'를 빠르게 검사 할 때 출력에 대해 궁금해했습니다. – Bergi

+0

좋은 답변 .. 답에서 취해야 할 많은 것들 :) –

+0

@ Bergi- 제발 설명해주세요 - "생성자는 Function을 말하지 않는 함수이고 두 가지 모두를가집니다. 따라서 Function.prototype 객체에서 상속받습니다." – jason

2

아주 좋은 책 중 하나 그게 전부에 픽업.

그것은 모든 객체 지향 기술을 다루는 프로그래머 관점에서 더 많은 자바 스크립트를 다루고 있으며 대부분의 내용은 자바 스크립트의 다른 책에서는 다루지 않습니다.

그리고 프로토 타입에 대해서. JavaScript의 모든 객체에는 숨겨진 상태 조각이 있습니다. 객체의 프로토 타입이라고하는 다른 객체에 대한 참조입니다. JavaScript의 프로토 타입 객체는 상속을 제공하고 메소드 구현을 공유 할 수있게 해줍니다. 프로토 타입도 체인. 즉, 프로토 타입 객체는 객체 일 뿐이므로 프로토 타입 객체는 다른 프로토 타입 객체에 대한 참조를 유지 관리 할 수 ​​있습니다.

Javascript의 프로토 타입은 내가 배우는 동안 경험 한 것처럼 조금 복잡합니다.

jst의 프로토 타입이 어떻게 작동하는지 알 수있는 훌륭한 reference입니다.

+0

그 참조는 굉장했다, 고마워. – keyser

+0

+1에 감사드립니다. :) – Katti

관련 문제