>  기사  >  웹 프론트엔드  >  자바스크립트 연구 노트 프로토타입 체인의 7가지 원칙_기본 지식

자바스크립트 연구 노트 프로토타입 체인의 7가지 원칙_기본 지식

WBOY
WBOY원래의
2016-05-16 18:36:44706검색

먼저 이 코드를 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다.




이 코드는 true를 반환합니다. 2단계가 정확하다고 설명하세요.
그럼 __proto__는 무엇인가요? 여기서 간단히 얘기해보자. 각 개체는 그 안에 있는 속성, 즉 __proto__를 초기화합니다. 개체의 속성에 액세스할 때 이 속성이 개체 내에 존재하지 않으면 개체는 __proto__로 이동하여 속성을 찾습니다. 이 __proto__는 자체적인 속성을 갖습니다. __proto__, 그래서 계속 찾아보게 되는데, 우리가 흔히 프로토타입 체인이라고 부르는 개념이죠.

표준에 따르면 __proto__는 대중에게 공개되지 않습니다. 즉, 비공개 속성이지만 Firefox 엔진은 이를 공개하고 외부에서 액세스하고 설정할 수 있는 공통 속성으로 만듭니다.

자, 개념은 명확합니다. 다음 코드를 살펴보겠습니다.



코드 복사 코드는 다음과 같습니다:


이렇게 파생해 보겠습니다.

var p=new Programmer()는 p.__proto__=Programmer를 얻을 수 있습니다. .prototype;
위에서 Programmer.prototype=new Person()을 지정했습니다. var p1=new Person();Programmer.prototype=p1;

p1.__proto__=Person.prototype;

Programmer.prototype.__proto__=Person.prototype;

위에 따르면 p.__proto__=Programmer.prototype을 얻습니다. p.__proto__.__proto__=Person.prototype을 얻을 수 있습니다.

자, 명료하게 계산한 후 위의 결과 p.Say()를 살펴보겠습니다. p에는 Say 속성이 없으므로 p1인 Programmer.prototype인 p.__proto__로 이동합니다. p1에는 Say가 없으므로 Person.prototype인 p.__proto__.__proto__로 이동합니다. 그래서 나는 Alert("Person say") 메소드를 찾았습니다.

나머지는 동일합니다.

프로토타입 체인의 구현 원리입니다.

결국 프로토타입은 사실 환상에 불과합니다. 즉 프로토타입 체인을 구현하는 데 있어 보조적인 역할을 할 뿐입니다. 즉, 새 것일 때만 일정한 가치를 가지며 실제로는 프로토타입 체인의 본질입니다. __proto__에 있어요!
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.