
273
9.5 서브클래스
가해 어떤 객체에서든 사용할 수 있게 하는 것도 가능은 하지만, 절대 좋은 방법은
아닙니다.
Object.prototype
에 추가한 프로퍼티는
for
/
in
루프에서 열거되기 때문
입니다. 14.1절에서 설명할
Object.defineProperty()
를 써서 프로퍼티를 열거 불가
로 설정할 수는 있습니다.
9.5
객체 지향 프로그래밍에서 클래스 B가 다른 클래스 A를 확장(extend)할 때 A는 슈
퍼클래스, B는 서브클래스라고 부릅니다. B의 인스턴스는 A의 메서드를 상속합니
다. 클래스 B는 자신만의 메서드를 정의할 수 있고, 이 중 일부는 클래스 A에 있는
같은 이름의 메서드를 덮어 쓸 수 있습니다. B의 메서드가 A의 메서드를 덮어 쓰는
경우, B에 존재하는 덮어 쓰는 메서드가 A에 존재하는 덮어 쓰인 메서드를 호출해
야 할 때가 많습니다. 마찬가지로 서브클래스 생성자
B()
는 일반적으로 슈퍼클래스
생성자
A()
를 호출해 그 인스턴스가 완전히 초기화됐는지 확인합니다.
이 절은 ES5 이전에 사용하던 서브클래스 정의 방법을 설명하고 곧바로
class
와
extends
키워드를 사용하는 서브클래스,
super
키워드를 사용하는 슈퍼클래스 생
성자 메서드 호출로 넘어갑니다. 이어서 서브클래스를 ...