extends
super
키워드를 사용하여 상속 관계 구현을 이 전 생성자 함수 방식 보다는 상속 관계 구현을 더욱 직관적으로 한다.class Person {
name; // 클래스 필드
constructor(name) { // 생성자
this.name = name; // 인스턴스 생성 및 초기화
}
print() { // 프로토타입 메소드 정의
return this.name;
}
static print() { // 정적메소드 정의
console.log('hello!');
}
}
const Person = '';
{
console.log(Person);
// ReferenceError: Cannot access 'Person' before initialization
class Person {}
}
위의 코드를 보면 만약 클래스 선언문이 호이스팅이 발생하지 않는다고 하면 ''
이 출력되어야 할 것이다. 그러나 위의 주석과 같이 선언문 전 접근할 수 없다. 라는 참조에러가 발생한다.
=> 이 말은 즉, const나 let 키워드로 선언한 변수와 같이 동작한다는 것이다.
따라서 클래스 선언문 이전에 TDZ에 빠지기 때문에 호이스팅이 발생하지 않는 것처럼 동작한다!
class Person {
name;
constructor(name){
this.name = name;
}
static print(){
console.log("hello world");
}
}
const dongs = new Person("dongs");
Person.print(); // "hello world"
dongs.print(); //print is not a function
static
키워드로 선언한 메소드는 정적 메소드이다.보통 this를 사용하지 않는 메소드를 정적메소드로 만든다!
#
키워드로 하며 호출할 때도 반드시 해당 키워드를 붙혀줘야한다.class Person {}
class Julie extends Person {}
위 코드와 같이 extends
키워드를 사용하여 클래스를 확장한다.
상속을 통해 확장된 클래스를 서브클래스
, 서브클래스에게 상속된 클래스를 수퍼클래스
라고 한다.
서브클래스를 파생클래스, 자식클래스 부르기도 하며 수퍼클래스를 부모클래스 라고 부르기도 한다!
또한 생성자 함수를 상속받아 클래스를 확장할 수도 있다.