prototype
함수의 속성은 new
연산자로 생성 될 때 해당 함수의 모든 인스턴스가 상속되는 개체를 보유합니다. 그리고이 프로토 타입 객체 (일반적으로)는 모두 constructor
속성을가집니다. 여기에는 순환 참조가 있습니다. 따라서 new test()
이 해당 속성을 상속하므로 (new test).constructor === test
은 true
으로 평가됩니다.
함수 객체의 속성 인 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
콘솔에서'Object.getPrototypeOf (test)'를 빠르게 검사 할 때 출력에 대해 궁금해했습니다. – Bergi
좋은 답변 .. 답에서 취해야 할 많은 것들 :) –
@ Bergi- 제발 설명해주세요 - "생성자는 Function을 말하지 않는 함수이고 두 가지 모두를가집니다. 따라서 Function.prototype 객체에서 상속받습니다." – jason