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

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

DDD
DDD원래의
2024-12-06 18:34:12589검색

Why Doesn't JavaScript's Constructor Property Update in Prototypal Inheritance?

JavaScript 상속 및 생성자 속성 이해

JavaScript에서 상속은 객체가 프로토타입 체인을 통해 다른 객체의 속성과 메서드를 상속하는 프로토타입 상속을 통해 이루어집니다. 생성자 속성은 이 메커니즘에서 중요한 역할을 합니다.

상속 및 생성자 속성

다음 코드를 고려하세요.

function a() {}
function b() {}
function c() {}

b.prototype = new a();
c.prototype = new b();

console.log((new a()).constructor); //a()
console.log((new b()).constructor); //a()
console.log((new c()).constructor); //a()

왜 b와 c에 대해 생성자가 업데이트되지 않았나요? 이는 JavaScript에서 생성자 속성이 인스턴스에 직접 할당되지 않기 때문입니다. 대신 프로토타입 객체에 상주합니다. 객체를 생성한 생성자 함수에 대한 참조를 저장합니다. 위의 예에서 b와 c의 프로토타입은 a의 인스턴스로 설정되므로 세 인스턴스 모두의 생성자가 a()로 보고됩니다.

생성자 업데이트 모범 사례

상속된 클래스의 생성자 속성을 업데이트하기 위한 일반적인 접근 방식은 중간 클래스를 사용하는 것입니다. 함수:

function base() {}
function derive() {
  derive.superclass = base.prototype;
  derive.prototype = new derive.superclass();

  derive.prototype.constructor = derive;
}

이 기법을 사용하면 파생 인스턴스의 생성자 속성이 파생 함수로 올바르게 설정됩니다.

Instanceof 및 프로토타입 체인

(new c()).constructor가 a()와 동일하지만, instanceof가 new c()를 다음과 같이 올바르게 식별하는 것이 여전히 가능합니다. c의 예. 이는 instanceof가 인스턴스 객체의 프로토타입 체인을 확인하기 때문입니다. 이 경우 new c()에 대한 프로토타입 체인은 c 프로토타입으로 다시 연결됩니다.

console.log(new a() instanceof a); //true
console.log(new b() instanceof b); //true
console.log(new c() instanceof c); //true

결론

JavaScript의 상속과 생성자 속성 상호 작용은 다음과 같을 수 있습니다. 복잡하지만 JavaScript에서 효과적인 객체 지향 프로그래밍을 위해서는 이를 이해하는 것이 중요합니다. 이 기사에 설명된 개념을 이해하면 상속과 프로토타입 체인을 효과적으로 활용하는 강력하고 재사용 가능한 코드를 작성할 수 있습니다.

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

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