>  기사  >  웹 프론트엔드  >  왜 `Child.prototype = Parent.prototype`이 JavaScript 상속을 중단합니까?

왜 `Child.prototype = Parent.prototype`이 JavaScript 상속을 중단합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-19 00:55:02309검색

Why Does `Child.prototype = Parent.prototype` Break JavaScript Inheritance?

왜 Child.prototype = Parent.Prototype이 Javascript 상속을 중단할 수 있습니까?

Javascript 상속에서 다음과 같은 상속 패턴을 접했을 수 있습니다. :

function GameObject(oImg, x, y) {
    // GameObject constructor
}

Spaceship.prototype = new GameObject();
Spaceship.prototype.constructor = Spaceship;

그러나 상속 후 Spaceship.prototype에 속성을 추가할 때 예기치 않은 동작을 발견했을 수 있습니다. Spaceship의 프로토타입 속성은 GameObject가 아닌 Spaceship으로 설정됩니다.

이는 Spaceship.prototype = GameObject.prototype을 설정하면 두 프로토타입이 동일한 객체를 참조하기 시작하기 때문에 발생합니다. 한 개체를 수정하면 다른 개체에도 영향을 미칩니다. 따라서 Spaceship.prototype에 속성을 추가하면 GameObject.prototype에도 추가됩니다.

이 문제를 방지하려면 다음을 사용할 수 있습니다.

Spaceship.prototype = Object.create(GameObject.prototype);

이렇게 하면 GameObject.prototype을 사용하여 새 개체가 생성됩니다. Spaceship.prototype에 대한 수정 사항이 GameObject.prototype에 영향을 미치지 않도록 프로토타입으로 사용합니다.

또는 생성자를 호출하려면 대신 Spaceship 생성자 내에서 GameObject.apply(this, 인수)를 사용합니다. 위 줄입니다.

위 내용은 왜 `Child.prototype = Parent.prototype`이 JavaScript 상속을 중단합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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