상속에 의한 클래스 확장
클래스와 생성자 함수는 인스턴스를 생성할 수 있는 함수라는 점에서 매우 유사하다. 클래스는 상속을 통해 기존 클래스를 확장할 수 있는 문법이 기본적으로 제공되지만 생성자 함수는 그렇지 않다.
예를 들어, Animal 클래스는 동물의 속성을 표현하고 Bird, Lion 클래스는 상속을 통해 Animal 클래스의 속성을 그대로 사용하면서 자신만의 고유한 속성만 추가하여 확장할 수 있다.
그래서 상속에 의한 클래스 확장은 코드 재사용에 유용하다.
클래스는 extends 키워드가 기본적으로 제공된다.
하지만 생성자 함수는 클래스와 같이 상속을 통해 다른 생성자 함수를 확장할 수 있는 문법이 제공되지 않는다.
클래스 상속을 통해 클래스의 속성을 상속받는다.
class Animal {
constructor(age, weigth){
this.age = age;
this.weigth = weigth;
}
eat() { return 'eat'; }
move() { return 'move'; }
}
// Bird 클래스 - 상속을 통해 Animal 클래스를 확장함
class Bird **extends** Animal {
fly() { return 'fly'; }
}
const bird = new Bird(1,5);
console.log(bird); //Bird { age: 1, weigth: 5 }
console.log(bird instanceof Bird); //true
console.log(bird instanceof Animal); //true
console.log(bird.eat()); //eat
console.log(bird.move()); //move
console.log(bird.fly()); //fly
상속에 의해 확장된 클래스 Bird에 의해 생성된 인스턴스의 프로토타입 체인
// 부모 클래스
class Base {}
// 자식 클래스(=파생/서브 클래스)
class Derived extends Base {}
extends 키워드