>웹 프론트엔드 >JS 튜토리얼 >Javascript 프로토타입 체인 및 Prototype_javascript 기술에 대한 오해

Javascript 프로토타입 체인 및 Prototype_javascript 기술에 대한 오해

WBOY
WBOY원래의
2016-05-16 16:33:041449검색

이전에는 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
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.