Super

다음과 같이 class를 상속받는 경우, 생성자를 만들게 되면 원래의 생성자를 잃게 된다.

class User {
  constructor(name, password) {
    this.username = name;
    this.password = password;
  }
  sayHi() {
    console.log(`Hi! I', ${this.username}`);
  }
}

class Admin extends User {
  constructor(isSuperAdmin) {
    this.isSuperAdmin = isSuperAdmin;
  }
  manage() {
    console.log("manage website");
  }
}

const tom = new Admin(true);

tom.manage();
tom.sayHi();

Uncaught ReferenceError: Must call super constructor in derived class before accessing ‘this’ or returning from derived constructor

다음과 같이 상속받은 클래스의 생성자에서 this를 사용하기 전 super constructor를 호출하라고 에러가 뜨는 것을 볼 수 있다. 그래서 다음과 같이 바꿀 수 있다.

class User {
  constructor(name, password) {
    this.username = name;
    this.password = password;
  }
  sayHi() {
    console.log(`Hi! I', ${this.username}`);
  }
}

class Admin extends User {
  constructor(name, password, isSuperAdmin) {
    super(name, password);
    this.isSuperAdmin = isSuperAdmin;
  }
  manage() {
    console.log("manage website");
  }
}

const tom = new Admin("Tom", "1234", true);

tom.manage();
tom.sayHi();

manage website

Hi! I’, Tom