> 웹 프론트엔드 > JS 튜토리얼 > 프로토타입 상속 중에 JavaScript의 `생성자` 속성이 업데이트되지 않는 이유는 무엇입니까?

프로토타입 상속 중에 JavaScript의 `생성자` 속성이 업데이트되지 않는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-01 05:05:17
원래의
618명이 탐색했습니다.

Why Doesn't JavaScript's `constructor` Property Update During Prototypal Inheritance?

JavaScript 상속: 생성자 속성 이해

질문:

코드를 고려하세요.

왜요? 프로토타입을 a에서 상속하도록 설정했음에도 불구하고 b와 c에 대해 생성자 속성이 업데이트되지 않습니까?

답변:

이를 이해하기 위해 개념적인 작업을 시작하겠습니다. 여행:

  • function Foo() {}와 같은 함수를 생성할 때 JavaScript는 내부적으로 Function 인스턴스(생성자)를 생성합니다. 함수).
  • 각 생성자 함수에는 프로토타입 객체에 대한 포인터인 프로토타입 속성이 있습니다.
  • 프로토타입 객체에는 생성자 함수를 다시 가리키는 생성자 속성이 있습니다.
  • new Foo()를 사용하여 Foo의 새 인스턴스를 생성하면 새 객체가 생성되고 해당 객체의 내부 [[proto]] 속성은 Foo의 프로토타입을 가리킵니다. constructor.

이제 질문이 생깁니다. 왜 인스턴스 객체 자체에 생성자 속성이 정의되지 않습니까? 다음 예를 고려하십시오.

이 예에서 생성자 속성은 다른 것과 마찬가지로 프로토타입의 메서드입니다. 그러나 특히 프로토타입의 인스턴스를 초기화하는 데 사용됩니다.

프로토타입에서 생성자 속성을 정의하면 여러 가지 이점이 있습니다.

  • 논리적 정확성: 예: Object.prototype.constructor 객체를 가리킨다. 인스턴스에 정의된 경우 null 인스턴스이므로 Object.prototype에 대해 정의되지 않습니다.
  • 다른 프로토타입 메서드와의 일관성: 이를 통해 정의할 필요가 없는 new 구현이 단순화됩니다. 각 인스턴스의 생성자 속성.
  • 효율성: 모든 인스턴스가 동일한 생성자 속성을 공유하므로 메모리가 줄어듭니다.

상속과 생성자 속성

상속의 경우 파생 생성자의 프로토타입 속성이 기본 생성자의 인스턴스로 설정됩니다. . 결과적으로 파생 생성자 인스턴스의 내부 [[proto]] 속성도 기본 생성자의 프로토타입을 가리킵니다. 이로 인해 파생 생성자 인스턴스의 생성자 속성이 기본 생성자를 가리키게 됩니다.

instanceof 연산자

instanceof 연산자는 인스턴스 객체와 생성자 함수에서 작동합니다. 일반적인 믿음과는 달리 인스턴스의 생성자 속성에 의존하지 않습니다. 대신, 인스턴스의 프로토타입 체인을 순회하여 내부 [[proto]] 속성이 생성자의 프로토타입 속성과 일치하는지 확인합니다. 일치 항목은 true를 반환하고 프로토타입 체인의 끝은 false를 반환합니다.

위 내용은 프로토타입 상속 중에 JavaScript의 `생성자` 속성이 업데이트되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿