TIL: Class와 자바스크립트

자바스크립트에서도 new를 사용하여 함수를 만들 수 있다. 갑자기 궁금해져서 console.dir()로 일반함수, 화살표함수, 그리고 new를 붙인 일반 함수를 찍어보았다.

image

확실한 차이는 잘 모르겠지만, new를 붙인 함수의 경우 constructor가 바로 보여지는 것이 보였다. 나중에 여유 있을 때 각자 다 다른 이유를 더 자세히 찾아보고 싶다.

클래스는 Synthetic Sugar이 아니랍니당..

지난번에 클래스를 공부했을 때는, 클래스는 자바스크립트에서 문법적 설탕 역할을 한다고 공부했었는데, 지금 다시 공부를 하게되면서 모던 자바스크립트를 보니

클래스는 Synthetic Sugar이 아니라는 소제목이 뙇….여기서 말하는 아닌 이유를 정리해봅니당

  1. 자바스크립트에서 class로 만든 함수 내부에는 [[FunctionKind]]라는 내부 프로퍼티에 "classConstructor"가 이름표처럼 붙어있다. 이 프로퍼티를 활용해서 class를 사용할 때 앞에 new를 붙여서 사용하지 않으면 에러가 나도록 한다.
class User {
  constructor() {}
}

alert(typeof User); // function
User(); // TypeError: Class constructor User cannot be invoked without 'new'
  1. 클래스로 만든 함수들의 프로퍼티는 열거할 수 없다.

클래스의 프로퍼티에 추가된 메소드들은 열거할 수 없다. 즉, 클래스가 만들어질 때 내부의 enumerable이 false로 설정된다.

  1. 클래스는 항상 strict mode로 실행된다.

내가 보기에 제대로 된 이유는 첫 번째 하나인 것 같다는 생각이 든다.

Reference