25-1. 클래스는 프로토타입의 문법적 설탕인가?

자바스크립트는 프로토타입 기반 객체 지향 언어인데, ES6때 클래스도 도입이 된 것임

기존 프로토타입 기반 패턴을 클래스 기반 패턴처럼 사용할 수 있도록한 ‘문법적 설탕’이라고 볼수 있지만 새로운 객체 생성 매커니즘으로 이해는것이 합당함

“클래스”와 “생성자 함수” 모두

25-2. 클래스 정의

클래스는 함수임 ⇒ 따라서, 클래스는 값처럼 사용할 수 있는 일급 객체임

생성자 함수 vs 클래스

생성자 함수

var Person = (function() {

	// 생성자 함수
	function Person(name) {
		this.name = name;
	}

	// 프로토타입 메서드
	Person.prototype.sayHi = function () {
		console.log('Hi! My name is ' + this.name);
	};

	// 정적 메서드
	Person.sayHello = function () {
		console.log('Hello!');
	};

	// 생성자 함수 반환
	return Person;
}())
클래스

class Person {
	constructor(name) {
		this.name = name;
	}
	
	sayHi() {
		console.log(`Hi! My name is ${this.name}`)
	}

	static sayHello() {
		console.log('Hello');
	}
}

25-3. 클래스 호이스팅