JavaScript에서 하위 클래스를 올바르게 하위 클래스로 만드는 방법은 무엇입니까?

스페이스 카우보이 2071

JavaScript에서 클래스를 올바르게 확장하는 방법에 대해 잘 알고 있다고 생각했지만 하위 클래스를 확장 할 때 메서드를 재정의하고 자식 클래스에서 부모 메서드를 호출 할 때 무한 루프가 발생합니다. 내가 잘못하고 있거나 JavaScript에서 이런 식으로 하위 클래스를 만들면 안됩니다.

누구든지 나를 교육하도록 도울 수 있습니까?

var Grand = function() {
	this.test();
};

Grand.prototype.constructor = Grand;

Grand.prototype.test = function() { 
	console.log( "Grand!")
};



var Parent = function() {
  this.supr.constructor.call( this );
};

Parent.prototype = Object.create( Grand.prototype );
Parent.prototype.constructor = Parent;
Parent.prototype.supr = Grand.prototype;

Parent.prototype.test = function() { 
	this.supr.test.call( this );
  console.log( "Parent!" );
};



var Child = function() {
  this.supr.constructor.call( this );
};

Child.prototype = Object.create( Parent.prototype );
Child.prototype.constructor = Child;
Child.prototype.supr = Parent.prototype;

Child.prototype.test = function() { 
	this.supr.test.call( this );
  console.log( "Child!" );
};



var g = new Grand(); // Outputs "Grand!"
var p = new Parent(); // Outputs "Grand!" "Parent!"
var c = new Child(); // Error: Endless Loop!

콘솔에 "Grand!", "Parent!", "Child!"가 기록 될 것으로 예상합니다. new Child ()를 인스턴스화 할 때 대신 무한 루프를 얻습니다.

저는 ActionScript 배경에서 왔기 때문에 JavaScript로 클래스를 만들면 여전히 커브 볼이 약간 발생합니다. 미리 도와 주셔서 감사합니다!

Dhananjay

문제는 다음 코드에 있습니다.

var Parent = function() {
  this.supr.constructor.call( this );  
};

이 코드가 실행될 때 어떤 일이 발생하는지 고려하십시오.

var c = new Child();

다음 this은 변수 c이므로 this.supr.constructor다음 코드 줄에서 설정시 항상 부모의 생성자가됩니다.

Child.prototype.supr = Parent.prototype;  // i.e. this.supr = Parent.prototype
Parent.prototype.constructor = Parent;  // i.e. this.supr.constructor = Parent

그래서, 아이의 생성자를 발동 할 때 this.supr.constructor.call( this );그것이 실행 Parent기능을하고, 부모 함수가 다시 실행 this.supr.constructor.call( this );결과 Parent함수가 무한 루프가 발생, 다시 호출된다.

수정 사항은 다음과 같이 기본 클래스 함수를 호출하는 것입니다.

var Child = function() {
  Child.prototype.supr.constructor.call( this );
};

이 게시물의 자세한 내용

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Eclipse의 클래스 경로에 폴더를 올바르게 추가하는 방법은 무엇입니까?

분류에서Dev

클래스를 알 때 메서드를 올바르게 호출하는 방법은 무엇입니까?

분류에서Dev

중첩 된 개인 클래스 컬렉션이있는 클래스에 대해 operator <<를 올바르게 오버로드하는 방법은 무엇입니까?

분류에서Dev

RoR에서 Numeric 클래스를 올바르게 원숭이 패치하는 방법은 무엇입니까?

분류에서Dev

클래스에서 함수를 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

R의 S3 클래스 : 수퍼 클래스와 하위 클래스를 올바르게 정의하는 방법은 무엇입니까?

분류에서Dev

HWND를 ref 클래스에 올바르게 저장하는 방법은 무엇입니까?

분류에서Dev

제네릭을 올바르게 하위 클래스 화하는 방법은 무엇입니까?

분류에서Dev

S4 클래스를 다른 S4 클래스에서 올바르게 상속하는 방법은 무엇입니까?

분류에서Dev

Powershell 클래스 내에서 Add-Type으로 추가 된 유형의 정적 메서드를 올바르게 호출하는 방법은 무엇입니까?

분류에서Dev

PHP의 클래스 내에서 배열을 올바르게 구성하는 방법은 무엇입니까?

분류에서Dev

자신의 소스와 요소로 SCNGeometry를 올바르게 하위 클래스 화하는 방법은 무엇입니까?

분류에서Dev

클래스를 올바르게 인스턴스화하는 방법은 무엇입니까?

분류에서Dev

@Override를 하위 클래스에 강제로 만드는 방법은 무엇입니까?

분류에서Dev

acornjs가 개인 클래스 필드 및 메서드를 올바르게 스타일 검사하도록하는 방법은 무엇입니까?

분류에서Dev

기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

분류에서Dev

기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

분류에서Dev

여러 클래스에서 application.properties를로드하는 올바른 방법은 무엇입니까?

분류에서Dev

QStyledItemDelegate의 하위 클래스가 PySide / PyQt의 QListView에서 마우스를 가리키면 올바르게 반응하도록 만드는 방법은 무엇입니까?

분류에서Dev

Automapper를 사용하여 클래스를 하위 클래스에 매핑하는 방법은 무엇입니까?

분류에서Dev

열거 형에 자식 클래스를 저장하는 방법과 올바르게 액세스하는 방법은 무엇입니까?

분류에서Dev

클래스에서 확장되고 인터페이스를 구현하는 것을 올바르게 반환하는 방법은 무엇입니까?

분류에서Dev

단위 테스트에서 IoC를 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

별도의 변수에 저장된 클래스 메서드를 올바르게 호출하는 방법은 무엇입니까?

분류에서Dev

마우스 바로 아래의 QGraphicsView에 위젯을 올바르게 놓는 방법은 무엇입니까?

분류에서Dev

종속성이있는 클래스를 올바르게 연결하는 방법은 무엇입니까?

분류에서Dev

반환 된 JSON을 C # 클래스로 올바르게 변환하는 방법은 무엇입니까?

분류에서Dev

클래스를 올바르게 초기화하는 방법은 무엇입니까? 실룩 거리다

분류에서Dev

동일한 클래스의 두 개체를 올바르게 비교하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Eclipse의 클래스 경로에 폴더를 올바르게 추가하는 방법은 무엇입니까?

  2. 2

    클래스를 알 때 메서드를 올바르게 호출하는 방법은 무엇입니까?

  3. 3

    중첩 된 개인 클래스 컬렉션이있는 클래스에 대해 operator <<를 올바르게 오버로드하는 방법은 무엇입니까?

  4. 4

    RoR에서 Numeric 클래스를 올바르게 원숭이 패치하는 방법은 무엇입니까?

  5. 5

    클래스에서 함수를 올바르게 사용하는 방법은 무엇입니까?

  6. 6

    R의 S3 클래스 : 수퍼 클래스와 하위 클래스를 올바르게 정의하는 방법은 무엇입니까?

  7. 7

    HWND를 ref 클래스에 올바르게 저장하는 방법은 무엇입니까?

  8. 8

    제네릭을 올바르게 하위 클래스 화하는 방법은 무엇입니까?

  9. 9

    S4 클래스를 다른 S4 클래스에서 올바르게 상속하는 방법은 무엇입니까?

  10. 10

    Powershell 클래스 내에서 Add-Type으로 추가 된 유형의 정적 메서드를 올바르게 호출하는 방법은 무엇입니까?

  11. 11

    PHP의 클래스 내에서 배열을 올바르게 구성하는 방법은 무엇입니까?

  12. 12

    자신의 소스와 요소로 SCNGeometry를 올바르게 하위 클래스 화하는 방법은 무엇입니까?

  13. 13

    클래스를 올바르게 인스턴스화하는 방법은 무엇입니까?

  14. 14

    @Override를 하위 클래스에 강제로 만드는 방법은 무엇입니까?

  15. 15

    acornjs가 개인 클래스 필드 및 메서드를 올바르게 스타일 검사하도록하는 방법은 무엇입니까?

  16. 16

    기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

  17. 17

    기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

  18. 18

    여러 클래스에서 application.properties를로드하는 올바른 방법은 무엇입니까?

  19. 19

    QStyledItemDelegate의 하위 클래스가 PySide / PyQt의 QListView에서 마우스를 가리키면 올바르게 반응하도록 만드는 방법은 무엇입니까?

  20. 20

    Automapper를 사용하여 클래스를 하위 클래스에 매핑하는 방법은 무엇입니까?

  21. 21

    열거 형에 자식 클래스를 저장하는 방법과 올바르게 액세스하는 방법은 무엇입니까?

  22. 22

    클래스에서 확장되고 인터페이스를 구현하는 것을 올바르게 반환하는 방법은 무엇입니까?

  23. 23

    단위 테스트에서 IoC를 올바르게 사용하는 방법은 무엇입니까?

  24. 24

    별도의 변수에 저장된 클래스 메서드를 올바르게 호출하는 방법은 무엇입니까?

  25. 25

    마우스 바로 아래의 QGraphicsView에 위젯을 올바르게 놓는 방법은 무엇입니까?

  26. 26

    종속성이있는 클래스를 올바르게 연결하는 방법은 무엇입니까?

  27. 27

    반환 된 JSON을 C # 클래스로 올바르게 변환하는 방법은 무엇입니까?

  28. 28

    클래스를 올바르게 초기화하는 방법은 무엇입니까? 실룩 거리다

  29. 29

    동일한 클래스의 두 개체를 올바르게 비교하는 방법은 무엇입니까?

뜨겁다태그

보관