>  기사  >  웹 프론트엔드  >  JavaScript 상속에서 proto와 constructor.prototype의 차이점은 무엇입니까?

JavaScript 상속에서 proto와 constructor.prototype의 차이점은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-21 14:57:30414검색

What's the Difference Between proto and constructor.prototype in JavaScript Inheritance?

proto와 constructor.prototype의 차이점 이해

__proto__ 속성과 __proto__ 속성의 차이점을 이해하는 것이 중요합니다. JavaScript 객체로 작업할 때 constructor.prototype.

proto 및 프로토타입 체인

모든 JavaScript 객체에는 프로토타입 객체를 참조하는 내부 __proto__ 속성이 있습니다. 생성자의. 이 프로토타입 객체에는 해당 유형의 객체에 대한 공유 속성과 메서드가 포함되어 있습니다.

데모

다음 코드를 고려하세요.

<code class="js">function Gadget(name, color) {
  this.name = name;
  this.color = color;
}

Gadget.prototype.rating = 3;

var newtoy = new Gadget("webcam", "black");</code>

여기서 예를 들어, newtoy의 __proto__는 값이 3인 rating 속성을 갖는 Gadget.prototype을 가리킵니다. 따라서 newtoy.__proto__.__proto__.__proto__에 액세스하면 더 이상 프로토타입 객체가 없기 때문에 null이 반환됩니다.

constructor.prototype.constructor.prototype

이 복잡한 표현식은 프로토타입 체인에 직접 액세스하지 않습니다. 대신 가젯 생성자의 constructor.prototype인 constructor.prototype의 constructor.prototype에 액세스하려고 시도합니다. 이 경우에는 Gadget 생성자 자체입니다. 따라서 계속 Gadget.prototype을 가리키고 있습니다.

Internet Explorer에서 Null 확인

Internet Explorer는 __proto__ 속성을 지원하지 않습니다. 이 경우 null을 확인하려면 hasOwnProperty() 메서드를 사용하여 __proto__가 존재하는지 확인할 수 있습니다. 예:

<code class="js">if (!(newtoy.hasOwnProperty("__proto__"))) {
  // `__proto__` is not supported
}</code>

시각적 표현

리적 설명을 돕기 위해 다음은 프로토타입 체인과 __proto__와 constructor.prototype 사이의 관계에 대한 시각적 맵입니다.

[프로토타입 체인 및 __proto__/constructor.prototype 관계 이미지]

이 단순화된 다이어그램은 JavaScript 객체의 내부 작동에 대한 포괄적인 개요를 제공하여 이러한 속성과 해당 역할 간의 구별을 명확히 하는 데 도움이 됩니다. 프로토타입 체인에 있습니다.

위 내용은 JavaScript 상속에서 proto와 constructor.prototype의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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