안녕하세요.
지난 포스팅에 이어서 모던 자바스크립트 Deep Dive 책을 바탕으로 스터디를 진행하면서 정리한 내용을 기술해보려합니다!
new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다.

- 객체 리터럴에 의한 객체 생성 방식은 직관적이고 간편함.
- 하지만 객체 리터럴에 의한 객체 생성 방식은 단 하나의 객체만 생성
- 따라서 동일한 프로퍼티를 갖는 객체를 여러 개 생성해야 하는 경우 매번 같은 프로퍼티를 기술행야 하기 때문에 비효율적이다.

- 생성자 함수에 의한 객체 생성 방식은 마치 객체(인스턴스)를 생성하기 위한 템플릿(클래스)처럼 생성자 함수를 사용하여 프로퍼티 구조가 동일한 객체 여러 개를 간편하게 생성할 수 있다.

함수가 일반 함수로서 호출되면 함수 객체의 내부 메서드 [[Call]]이 호출되고 new 연산자와 함께 생성자 함수로서 호출되면 내부 메서드 [[Construct]]가 호출된다.

함수를 일반 함수로서 호출하면 함수 객체의 내부 메서드 [[Call]]이 호출되고 new 연산자와 함께 생성자 함수로서 호출하면 내부 메서드 [[Construct]]가 호출된다. non-constructor인 함수 객체는 내부 메서드 [[Construct]]를 갖지 않는다. 따라서 non-contructor인 함수 객체를 생성자 함수로서 호출하면 에러가 발생한다.

- 일반 함수와 생성자 함수에 특별한 형식적 차이는 없다.
- new 연산자와 함께 함수를 호출하면 해당 함수는 생성자 함수로 동작한다.
- 다시 말해, 함수 객체의 내부 메서드 [[Call]]이 호출되는 것이 아니라 [[Construct]]가 호출된다.
- 단, new 연산자와 함께 호출하는 함수는 non-constructor가 아닌 contructor이어야 한다.

- new 연산자와 함께 생성자 함수로서 호출되면 함수 내부의 new, target은 함수 자신을 가리킨다.
new 연산자없이 일반 함수로서 호출된 함수 내부의 new, target은 undefined다.

이상으로 생성자 함수에 의한 객체 생성에 대한 포스팅을 마치도록 하겠습니다!