> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 상속 메커니즘이 생성자 속성을 자동으로 업데이트하지 않는 이유는 무엇입니까?

JavaScript의 상속 메커니즘이 생성자 속성을 자동으로 업데이트하지 않는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-04 15:07:11
원래의
225명이 탐색했습니다.

Why Doesn't JavaScript's Inheritance Mechanism Automatically Update the Constructor Property?

JavaScript의 상속 및 생성자 속성 이해

제공된 코드 조각은 JavaScript의 상속을 보여줍니다. 하지만 생성자 속성과 인스턴스 오브 연산자에 대한 의문도 제기됩니다.

왜 b와 c에 대해 생성자 속성이 업데이트되지 않습니까?

b.prototype을 다음으로 설정할 때 new a(), a의 프로토타입 객체는 b의 프로토타입이 됩니다. 이는 함수 b로 유지되는 b의 생성자 속성을 업데이트하지 않습니다. 마찬가지로 c는 b에서 상속되므로 궁극적으로 a를 가리키는 b의 생성자도 상속합니다.

상속 메커니즘에 결함이 있습니까?

아니요, 상속 메커니즘이 정확합니다. . JavaScript에서 생성자 속성은 인스턴스 자체가 아니라 프로토타입 객체의 속성입니다. 인스턴스를 생성할 때 내부 [[proto]] 속성은 생성자 함수 자체가 아닌 생성자의 프로토타입을 가리킵니다.

생성자 속성 업데이트

생성자 속성을 업데이트하려면 다음 패턴을 사용할 수 있습니다.

function Square(side) {
    if (this instanceof Square) {
        this.side = side;
    } else {
        return new Square(side);
    }
}
로그인 후 복사

이해 instanceof

instanceof 연산자는 인스턴스의 생성자 속성에 의존하지 않습니다. 대신, 인스턴스 객체의 프로토타입 체인에 생성자 함수의 프로토타입이 포함되어 있는지 확인합니다. 주어진 코드에서:

c.prototype = new b();
console.log(new c() instanceof c); // true
로그인 후 복사

(new c())의 생성자 속성이 a()를 가리키더라도, instanceof는 프로토타입 체인을 확인하고 이를 c의 인스턴스로 올바르게 식별합니다. c.prototype이 포함됩니다.

결론

JavaScript의 상속에는 프로토타입 설정이 포함됩니다. 파생 생성자의 인스턴스를 기본 생성자의 인스턴스로 변환합니다. 생성자 속성은 프로토타입 객체의 속성으로 유지되며, instanceof 연산자는 프로토타입 체인을 확인하여 인스턴스가 특정 생성자에 속하는지 확인합니다.

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

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