인스턴스를 생성하고 초기화하기 위한 메서드이다.
class Car {
constructor(name) {
this.name = name;
}
}
const myCar = new Car('tesla'); // this.name은 'tesla'
constructor 내부에 선언한 프로퍼티가 클래스가 생성한 인스턴스의 프로퍼티로 추가된다.
constructor 내부에는 return으로 값을 반환하게 되면 객체일 때는 객체가 반환되고, 원시값일 때는 this가 반환된다. this가 아닌 다른 값을 반환하게 되면 기본 동작을 훼손하는 것이기 때문에 반드시 생략한다.
생성자 함수에서는 프로토타입 메서드를 명시적으로 추가해야 인스턴스를 생성할 수 있었다면 클래스에서 프로토타입 메서드가 없어도 기본적으로 프로토타입 메서드가 된다.
class Person {
constructor(name) {
this.name = name;
}
// 프로토타입 메서드, Person.prototype.sayHi 를 명시하지 않아도 된다
sayHi() {
console.log(`Hi, I'm ${this.name}`);
}
}
클래스에 바인딩 되어 인스턴스를 생성하지 않아도 호출할 수 있는 메서드이다. 정적 메서드가 바인딩 된 클래스는 인스턴스 프로토타입 체인상에 존재하지 않기 때문에 인스턴스 메서드를 상속받지 않는다.
class Person {
constructor(name) {
this.name = name;
}
static sayHi() {
console.log(`Hi`);
}
}
따라서 메서드 내부에서 인스턴스 프로퍼티를 참조해야 한다면 this를 사용해야 하며, 이 경우에는 프로토타입 메서드로 정의해야한다.