클래스
class Book{
// 속성(프로퍼티)
constructor(title, author, price){
this.title = title;
this.author = author;
this.price = price;
}
// 메서드(프로토타입객체에 쓰던것)
book_info() {
console.log(`${this.title}, ${this.author})`;
}
} // end class
let book = new Book('난중일기', '이순신', '12000');
book.book_info(); // '난중일기, 이순신'
이런 방식을 클래스 표현식이라 한다. constructor 영역에는 프로퍼티(속성)를 그다음 부분에는 메서드를 정의한다. 생성자 함수와 달리 내부에 메서드까지 같이 정의 할 수 있다. 위의 메서드 정의에서도 볼 수 있듯이, 클래스안의 함수들은 function 키워드를 작성하지 않아도 된다. 클래스는 호이스팅이 적용되지 않아, 클래스 선언을 먼저 해야한다.
클래스의 상속
1. Character의 자식 클래스 Monster를 추가한다. extends로 부모(상위)클래스를 지정할 수 있다. 인스턴스는 원형에서 복사되어 그대로 재사용하는 것이지만, 클래스는 부모(super)에게서 원형을 상속받아, 변형된 클래스를 만들어낸다.
2. super()은 부모의 생성자(constructor)를 호출해 자식클래스 Monster에 상속 시킨다.
3. 새속성을 추가하여 변형된 클래스를 만든다.
4. 새로운 메서드인 스킬사용 메서드를 만든다.
정리
생성자함수(ES5) |
클래스(ES6) |
인스턴스 : 생성자함수와 동일한 형태로 복사되어 만들어진 객체 |
클래스상속 : 부모에게서 원형을 상속받아 변형된 또다른 클래스 |
속성(프로퍼티)은 생성자 함수에, 메서드는 해당 함수의 프로토타입에 정의 |
속성, 메서드 모두 클래스 내부에 정의 |
인스턴스객체는 개별적인 영역을 가지지만, 메서드가 정의된 생성자함수의 프로토타입 공간은 생성자함수로 생성된 인스턴스들이 참조형태로 공유한다. |
'programming > javascript' 카테고리의 다른 글
[webpack] 오래된 글을 보고 웹팩 설정을 하다가 바뀐 부분이 많아 고생했던 일 (0) | 2018.11.18 |
---|---|
[jquery] offset (0) | 2018.03.28 |
[ES6] 배열과 객체의 비구조화 (0) | 2018.02.06 |
[ES6] 템플릿 표현식 (0) | 2018.02.06 |
[ES6] for ~ of문 (0) | 2018.02.06 |