#1 // 클래스 선언문
class Car {}
#2 // 익명 클래스 표현식
const Car = class {};
#3 // 기명 클래스 표현식
const Car = class MyCar {};
클래스는 인스턴스를 생성하기 위한 생성자 함수이다.
그래서 함수로 평가되기 때문에 함수의 호이스팅과 같다.
#4
class Car {
constructor(name) { // 생성자 함수(메서드)
this.name = name;
}
intro() { // 프로토타입 메서드
console.log(`my car is ${this.name}`);
}
static kia() { // 정적 메서드
console.log('KIA');
}
}
const my = new Car('K9') // 인스턴스 생성
my.intro()
Car.kia()
클래스 내부에는 생성자, 프로토타입, 정적 이렇게 총 3가지의 메서드를 정의할 수 있다.
클래스는 내부에 constructor메서드를 무조건 정의해야 한다.
constructor는 생성자 함수라서 안에다가 this를 사용한 인스턴스 프러퍼티를 정의한다.
생성자 함수로 인스턴스를 생성하면 객체 리터럴로 생성하는 것 보다 사용자가 사용하기 편하다.
하지만 생성된 인스턴스를 100번 호출할때, 모든 인스턴스가 동일한 메서드를 중복 소유하는 것은 메모리를 불필요하게 낭비한다.
따라서 모든 객체가 가지고 있는 프로토타입을 참조하여 객체간의 상속을 구현하여 불필요한 중복을 제거할 수 있다.