이전에는 Javascript의 프로토타입 체인에서 프로토타입 상속과 식별자 조회에 대해 약간 혼란스러웠습니다.
예를 들어 다음 코드는 다음과 같습니다.
함수 Foo() {};
var foo = new Foo();
Foo.prototype.label = "laruence";
경고(foo.label); //출력: laruence
경고(Foo.label);//출력: 정의되지 않음
오늘 다음 사진을 봤습니다.
자바스크립트 객체 레이아웃
또한 Javascript 객체 계층 구조를 참조하세요.
프로토타입은 해당 함수로 생성된 객체/인스턴스에 의해 상속된 속성에만 사용됩니다. 함수 자체는 연결된 프로토타입을 사용하지 않습니다.
즉, 함수 객체의 프로토타입은 프로토타입 체인 검색 과정에 영향을 미치지 않습니다.
오늘 발견한 것은 Firefox에서(firefox가 __proto__를 통해 [[prototype]]을 노출했기 때문에) 실제로 식별자 검색에 참여하는 것은 함수 개체의 __proto__입니다.
함수 Foo() {};
var foo = new Foo();
Foo.__proto__.label = "laruence";
경고(Foo.label); //출력: laruence
경고(foo.label);//출력: 정의되지 않음
그리고 당연히:
함수 Foo() {};
Alert(Foo.__proto__ === Foo.prototype); //출력: false
추가로 설명도 되어있습니다
경고(Object.forEach); // 정의되지 않음
Function.prototype.forEach = 함수(객체, 블록, 컨텍스트) {
for(객체의 var 키) {
If (typeof this.prototype[key] == "정의되지 않음") {
block.call(context, object[key], key, object);
}
}
};
경고(Object.forEach);
경고(Function.forEach);
Alert(Object.forEach === Function.forEach); // true