자바스크립트는 프로토타입 기반 언어이므로 클래스의 개념이 존재하지 않습니다. 그렇지만 프로토타입을 일반적인 의미에서의 클래스 관전에서 접근해보면 비슷하게 해석할 요소가 있습니다.
자바스크립트 함수는 생성자 함수와 스테틱 멤버 및 프로토타입 멤버를 가집니다. 이러한 구성을 가지므로 함수를 인스턴스로 생성하면 클래스와 매우 유사해집니다. 프로토타입 멤버는 프로토타입 체인을 통해서 참조가 가능합니다. 프로토타입을 참조하는 것이 상속의 구현과 같은 역할을 할 수 있습니다.
그러니까 자바스크립트에서 클래스 상속을 구현했다는 것은 결국 프로토타입 체이닝을 잘 연결한 것으로 이해하면 되는 것입니다.
ES6에서는 본격적으로 클래스 문법이 도입됐습니다.
class 키워드로 해당 객체는 클래스 객체임을 정의합니다. class 본문에서는 function 키워드를 생략하더라도 모두 메서드로 인식합니다.
class 객체 안에 constructor로 메서드를 선언하면 함수를 인스턴스로 만들때의 생성자 함수와 같은 역할을 합니다.
class 객체 안에서 static 키워드로 함수를 선언하면 자신만이 사용할 수 있는 스태틱 멤버가 됩니다.
class 객체 안에서 method를 선언하면 prototype 객체 내부에 할당되는 메서드입니다. 인스턴스가 프로토타입 체이닝을 통해 마치 자신의 것처럼 호출할 수 있는 메서드입니다.
extends 키워드를 사용하여 다른 클래스를 상속합니다.
constructor 내부에서는 super 키워드를 함수처럼 사용할 수 있는데, 이 함수는 SuperClass의 constructor를 실행합니다.
constructor 메서드를 제외한 다른 메서드에서는 super 키워드를 사용하여 SuperClass.prototype 객체에 접근할 수 있습니다. 호출한 메서드의 this는 super가 아닌 원래의 this를 그대로 따릅니다.