나는 JS : this & Object Prototypes 에서 프로토 타입을 배우고 있습니다 .이 디자인은 그 아래의 디자인을 이해하고 많은 오해를 명확히하기위한 훌륭한 책 instanceof
입니다.
그러나 나는 사람들이 여기에서 묻는 것과 같은 질문을 가지고 있습니다. 몇 가지 답변이 실제로 도움이되고 깨달았습니다. 또한 내 이해를 나누고 싶습니다.
프로토 타입이란 무엇입니까?
JavaScript의 객체에는 사양에서로 표시된 내부 속성 [[Prototype]]
이 있으며 이는 단순히 다른 객체에 대한 참조입니다. 거의 모든 객체에는 null
생성시이 속성에 대해 값이 아닌 값 이 부여 됩니다.
객체의 프로토 타입을 얻는 방법?
를 통해 __proto__
또는Object.getPrototypeOf
var a = { name: "wendi" };
a.__proto__ === Object.prototype // true
Object.getPrototypeOf(a) === Object.prototype // true
function Foo() {};
var b = new Foo();
b.__proto__ === Foo.prototype
b.__proto__.__proto__ === Object.prototype
무엇입니까 prototype
?
prototype
는 함수 의 특수 속성으로 자동 생성 된 객체로 , 위임 (상속) 체인 (일명 프로토 타입 체인)을 설정하는 데 사용됩니다.
우리는 함수를 만들 때 a
, prototype
자동으로 특별한 속성으로 생성 a
하고, 등의 기능 코드를 저장 constructor
에 prototype
.
function Foo() {};
Foo.prototype // Object {constructor: function}
Foo.prototype.constructor === Foo // true
이 속성을 함수 객체의 속성 (메서드 포함)을 저장하는 장소로 생각하고 싶습니다. 그것은 또한 JS에서 유틸리티 기능은 다음과 같이 정의되는 이유입니다 Array.prototype.forEach()
, Function.prototype.bind()
,Object.prototype.toString().
함수 의 속성을 강조해야하는 이유는 무엇 입니까?
{}.prototype // undefined;
(function(){}).prototype // Object {constructor: function}
// The example above shows object does not have the prototype property.
// But we have Object.prototype, which implies an interesting fact that
typeof Object === "function"
var obj = new Object();
그래서, Arary
, Function
, Object
모든 기능은 다음과 같습니다. 이것이 JS에 대한 인상을 새롭게한다는 것을 인정해야합니다. 나는 JS에서 함수가 일류 시민이라는 것을 알고 있지만 함수에 내장 된 것 같습니다.
차이 무엇 __proto__
과 prototype
?
__proto__
참조는 모든 객체 에서 작동 하여 해당 [[Prototype]]
속성을 나타냅니다.
prototype
는 함수 의 특수 속성으로 자동 생성되는 객체 로, 함수 객체의 속성 (메서드 포함)을 저장하는 데 사용됩니다.
이 두 가지를 사용하여 프로토 타입 체인을 정신적으로 매핑 할 수 있습니다. 이 그림과 같이
function Foo() {}
var b = new Foo();
b.__proto__ === Foo.prototype // true
Foo.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype // true
__proto__
다릅니constructor.prototype
까?