클래스는 let, const와 같이 클래스 선언문 이전에 참조할 수 없다. 같은 이유이다.
constructor 는 인스턴스를 생성하고 클래스 필드를 초기화하기 위한 특수한 메소드이다. 클래스필드 생성에 이용됨 ( 클래스 필드란 this에 추가한 프로퍼티를 부른다)
// 클래스 선언문
class Person {
// constructor(생성자). 이름을 바꿀 수 없다.
constructor(name) {
// this는 클래스가 생성할 인스턴스를 가리킨다.
// _name은 클래스 필드이다.
this._name = name;
}
}
// 인스턴스 생성
const me = new Person('Lee');
console.log(me); // Person {_name: "Lee"}
constructor를 생략하고 class를 선언하여도 괜찮다. 빈 객체로 생성이 되기 때문에 인스턴스를 생성하고 동적으로 추가하면 된다.
// constructor는 인스턴스의 생성과 동시에 클래스 필드의 생성과 초기화를 실행한다.
클래스에선 constructor를 제외하고 메소드만 선언할 수 있다.
class Foo {
name = ''; // SyntaxError
constructor() {}
}
getter, setter
getter : 값을 반환함
setter : 값을 조작할 수 있음
정적메소드 (static)
stactic메소드
classs의 일반 메소드들은 생성된 인스턴스를 만들면 그 인스턴스의 주소 값을 가지지만 정적메소드들은 인스턴스를 만들어도 인스턴스 주소에 생성되지 않고 class 주소에만 존재한다.