더북(TheBook)

3.1.3 화살표 함수는 생성자가 될 수 없다

화살표 함수는 this를 가지고 있지 않아서 화살표 함수가 생성자 함수가 될 수 없음을 이해했을 것이다. 즉, new와 함께 사용할 수 없다.

const Doomed = () => { };
const d = new Doomed(); // TypeError: Doomed is not a constructor

결국 생성자 함수의 주된 목적은 새로 생성된 객체를 채우는 것이다. 이는 this를 통해 함수에 전달된다. 함수에 고유한 것이 없으면 새 객체에 속성을 설정할 수 없으며 생성자가 되는 것은 의미가 없다. 생성자로 사용하는 것은 명시적으로 허용되지 않는다.

명시적으로 허용하지 않기 때문에 화살표 함수는 기존 함수보다 가벼워질 수 있다. 객체가 첨부된 프로토타입 속성을 가질 필요가 없기 때문이다. 함수를 생성자로 사용하면 생성된 새 객체의 프로토타입이 함수의 프로토타입에서 할당된다는 것을 기억할 것이다.

function Thingy() {
}
var t = new Thingy();
console.log(Object.getPrototypeOf(t) === Thingy.prototype); // true

자바스크립트 엔진은 기존 함수를 생성자로 사용할지 여부를 미리 알 수 없기 때문에 생성하는 모든 기존 함수에 참조할 프로토타입 속성과 객체를 넣어야 한다(물론 최적화를 해야 한다).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.