super ()를 사용하여 기본 클래스 생성자에 액세스해야하는 이유는 무엇입니까?

스 베탄 디 모프

서브 클래스에서 기본 클래스의 생성자를 참조해야하는 이유는 무엇입니까? 어느 쪽이든 동일한 결과를 얻는 것 같습니다.

class Animal {
    constructor(age) {
        this.age = age;
    }
}

class Mammal extends Animal {}

let lion = new Mammal(3);
lion.age //=> 3

반대로

class Mammal extends Animal {
    constructor(){
        super(3)
    }
}

let lion = new Mammal();
lion.age //=> 3
TJ 크라우 더

명시 적 생성자를 제공하지 않으면 하위 클래스 1 에서 JavaScript 엔진이 다음과 같은 생성자 를 생성합니다.

constructor(...args) {
    super(...args);
}

그것이 첫 번째 예에서 일어나는 일입니다. 그래서 이건:

class Mammal extends Animal {
}

다음과 같습니다.

class Mammal extends Animal {
    constructor(...args) {
        super(...args);
    }
}

... 두 번째는 명시 적이지만 첫 번째는 JavaScript 엔진이 클래스에 삽입 한 생성자를 사용하는 것입니다.

이것은 §14.5.14의 10 단계 : 런타임 의미론 : ClassDefinitionEvaluation에 정의되어 있습니다 .

  1. 생성자 가 비어 있으면

    • ClassHeritage opt 가있는 경우

      • 하자 생성자는 소스 텍스트를 구문 분석의 결과

        constructor(... args){ super (...args);}
        

        목표 기호 MethodDefinition 과 함께 구문 문법을 사용합니다 .

    • 그밖에,

      • 하자 생성자는 소스 텍스트를 구문 분석의 결과

        constructor( ){ }
        

        목표 기호 MethodDefinition 과 함께 구문 문법을 사용합니다 .


1 위에서 볼 수 있듯이 하위 클래스가 아닌 경우 constructor() { }.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

맵의 값에 액세스하기 위해 'this'를 사용해야하는 이유는 무엇입니까?

분류에서Dev

BoundServices에 액세스하기 위해 바인더 클래스를 상속하는 다른 클래스를 사용하는 이유는 무엇입니까?

분류에서Dev

기본 클래스에서 파생 클래스 멤버를 사용해야하는 클래스를 디자인하는 방법은 무엇입니까?

분류에서Dev

gdb를 사용하여 기본 클래스 생성자를 중단하는 방법은 무엇입니까?

분류에서Dev

여러 아버지 클래스에서 특정 클래스를 상속하기 위해 super ()를 사용하는 방법은 무엇입니까?

분류에서Dev

선언을 사용하여 생성 된 생성자가 기본 클래스와 동일한 액세스 수준을 갖는 이유는 무엇입니까?

분류에서Dev

const_iterator를 사용하여 템플릿 기본 클래스 생성자를 호출 할 수없는 이유는 무엇입니까?

분류에서Dev

인라인 사용자 제공 생성자가 기본 클래스 생성자를 odr- 사용하는 이유는 무엇입니까?

분류에서Dev

기본 클래스에서 "super ()"를 사용해야합니까?

분류에서Dev

파생 클래스의 복사 생성자를 정의하려면 기본 클래스의 기본 생성자를 정의해야하는 이유는 무엇입니까?

분류에서Dev

다형성을 사용하여 기본 클래스에서 파생 된 클래스 벡터 멤버에 액세스하는 방법은 무엇입니까?

분류에서Dev

추상 파생 클래스가 가상 기본 클래스를 초기화해야하는 이유는 무엇입니까?

분류에서Dev

파생 클래스에서 액세스하기 위해 추상 클래스에서 필드를 "공용"으로 선언해야하는 이유는 무엇입니까?

분류에서Dev

같은 클래스의 다른 생성자에 기본 생성자 데이터를 사용하는 방법은 무엇입니까?

분류에서Dev

가져온 구조체에 액세스하기 위해 추가`::`접두사를 사용해야하는 이유는 무엇입니까?

분류에서Dev

2 차원 배열에 액세스하기 위해 이중 포인터를 사용해야하는 이유는 무엇입니까?

분류에서Dev

Java가 수퍼 클래스의 생성자에 액세스 할 수없는 서브 클래스를 허용하지 않는 이유는 무엇입니까?

분류에서Dev

이 예제에서 Clang을 사용하여 기본 클래스를 얻는 방법은 무엇입니까?

분류에서Dev

C ++에서 생성자 (생성자 만)를 사용하여 클래스에서 큰 전용 배열을 초기화하는 방법은 무엇입니까?

분류에서Dev

서브 클래스에서 super (qualifications)를 사용하면 수퍼 클래스에 정의 된 ReferenceError가 발생하는 이유는 무엇입니까?

분류에서Dev

Java의 자식 클래스 메서드에서 super 키워드를 사용하여 슈퍼 클래스 생성자를 호출 할 수없는 이유는 무엇입니까?

분류에서Dev

기본 개체 (비가 상)를 사용하여 파생 클래스에 정의 된 함수를 호출 할 수있는 이유는 무엇입니까?

분류에서Dev

using-declared 상속 생성자가 기본 생성자를 사용하여 가상 기본 클래스를 초기화하지 않는 이유는 무엇입니까?

분류에서Dev

MyClass의 기본 생성자가 Object 클래스의 super ie를 호출하는 이유

분류에서Dev

파생 클래스에서 기본 클래스 생성자의 특수화를 구현하는 다른 방법은 무엇입니까?

분류에서Dev

C ++에서 이니셜 라이저 목록에서 기본 클래스의 템플릿 인수를 반복해야하는 이유는 무엇입니까?

분류에서Dev

파생 클래스 변수를 초기화하고 기본 클래스 유형에 할당하면 멤버에 대한 액세스가 허용되지 않는 이유는 무엇입니까?

분류에서Dev

CRTP를 사용하여 기본 클래스의 자식 클래스를 생성자에 전달합니까?

분류에서Dev

ASM을 통해 생성 된 클래스의 생성자에 액세스하는 모든 리플렉션 메서드는 클래스가 기본 유형을 참조하는 경우 NoClassDefFoundError를 발생시킵니다.

Related 관련 기사

  1. 1

    맵의 값에 액세스하기 위해 'this'를 사용해야하는 이유는 무엇입니까?

  2. 2

    BoundServices에 액세스하기 위해 바인더 클래스를 상속하는 다른 클래스를 사용하는 이유는 무엇입니까?

  3. 3

    기본 클래스에서 파생 클래스 멤버를 사용해야하는 클래스를 디자인하는 방법은 무엇입니까?

  4. 4

    gdb를 사용하여 기본 클래스 생성자를 중단하는 방법은 무엇입니까?

  5. 5

    여러 아버지 클래스에서 특정 클래스를 상속하기 위해 super ()를 사용하는 방법은 무엇입니까?

  6. 6

    선언을 사용하여 생성 된 생성자가 기본 클래스와 동일한 액세스 수준을 갖는 이유는 무엇입니까?

  7. 7

    const_iterator를 사용하여 템플릿 기본 클래스 생성자를 호출 할 수없는 이유는 무엇입니까?

  8. 8

    인라인 사용자 제공 생성자가 기본 클래스 생성자를 odr- 사용하는 이유는 무엇입니까?

  9. 9

    기본 클래스에서 "super ()"를 사용해야합니까?

  10. 10

    파생 클래스의 복사 생성자를 정의하려면 기본 클래스의 기본 생성자를 정의해야하는 이유는 무엇입니까?

  11. 11

    다형성을 사용하여 기본 클래스에서 파생 된 클래스 벡터 멤버에 액세스하는 방법은 무엇입니까?

  12. 12

    추상 파생 클래스가 가상 기본 클래스를 초기화해야하는 이유는 무엇입니까?

  13. 13

    파생 클래스에서 액세스하기 위해 추상 클래스에서 필드를 "공용"으로 선언해야하는 이유는 무엇입니까?

  14. 14

    같은 클래스의 다른 생성자에 기본 생성자 데이터를 사용하는 방법은 무엇입니까?

  15. 15

    가져온 구조체에 액세스하기 위해 추가`::`접두사를 사용해야하는 이유는 무엇입니까?

  16. 16

    2 차원 배열에 액세스하기 위해 이중 포인터를 사용해야하는 이유는 무엇입니까?

  17. 17

    Java가 수퍼 클래스의 생성자에 액세스 할 수없는 서브 클래스를 허용하지 않는 이유는 무엇입니까?

  18. 18

    이 예제에서 Clang을 사용하여 기본 클래스를 얻는 방법은 무엇입니까?

  19. 19

    C ++에서 생성자 (생성자 만)를 사용하여 클래스에서 큰 전용 배열을 초기화하는 방법은 무엇입니까?

  20. 20

    서브 클래스에서 super (qualifications)를 사용하면 수퍼 클래스에 정의 된 ReferenceError가 발생하는 이유는 무엇입니까?

  21. 21

    Java의 자식 클래스 메서드에서 super 키워드를 사용하여 슈퍼 클래스 생성자를 호출 할 수없는 이유는 무엇입니까?

  22. 22

    기본 개체 (비가 상)를 사용하여 파생 클래스에 정의 된 함수를 호출 할 수있는 이유는 무엇입니까?

  23. 23

    using-declared 상속 생성자가 기본 생성자를 사용하여 가상 기본 클래스를 초기화하지 않는 이유는 무엇입니까?

  24. 24

    MyClass의 기본 생성자가 Object 클래스의 super ie를 호출하는 이유

  25. 25

    파생 클래스에서 기본 클래스 생성자의 특수화를 구현하는 다른 방법은 무엇입니까?

  26. 26

    C ++에서 이니셜 라이저 목록에서 기본 클래스의 템플릿 인수를 반복해야하는 이유는 무엇입니까?

  27. 27

    파생 클래스 변수를 초기화하고 기본 클래스 유형에 할당하면 멤버에 대한 액세스가 허용되지 않는 이유는 무엇입니까?

  28. 28

    CRTP를 사용하여 기본 클래스의 자식 클래스를 생성자에 전달합니까?

  29. 29

    ASM을 통해 생성 된 클래스의 생성자에 액세스하는 모든 리플렉션 메서드는 클래스가 기본 유형을 참조하는 경우 NoClassDefFoundError를 발생시킵니다.

뜨겁다태그

보관