<aside> 🔥
new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다.
자바스크립트는 Object 생성자 함수 이외에도 String, Number, Boolean, Function, Array, Date, RegExp, Promise 등의 ‘빌트인(built-in) 생성자 함수를 제공한다.
</aside>
객체 리터럴에 의한 객체 생성 방식은 직관적이고 간편하다.
하지만 객체 리터럴에 의한 객체 생성 방식은 단하나의 객체만 생성한다.
따라서 동일한 프로퍼티를 갖는 객체를 여러 개 생성해야 하는 경우 매번 같은 프로퍼티를 기술해야 하기 때문에
비효율적이다.
const circle1 = {
radius: 5,
getDiameter() {
return 2 * this.radius;
}
};
const circle2 = {
radius: 10,
getDiameter() {
return 2 * this.radius;
}
};
생성자 함수에 의한 객체 생성 방식은 마치 객체(인스턴스)를 생성하기 위한 템플릿(클래스)처럼 생성자 함수를 사용하여 프로퍼티 구조가 동일한 객체 여러 개를 간편하게 생성할 수 있다.
function Circle(radius) {
this.radius = radius;
this.getDiameter = function () {
return 2 * this.radius;
};
}
//생성하기
const circle1 = new Circle(5);
const circle2 = new Circle(10);
생성자 함수는 이름 그래도 객체를 생성하는 함수이다.
그러나 반드시 new 연산자와 함께 함수를 호출하여야 한다.
const circle3 = Circle(15);
console.log(circle3); //undefined

생성자 함수 내부의 코드를 살펴보면 this에 프로퍼티를 추가하고 필요에 따라 전달된 인수를 프로퍼티의 초기값으로서 할당하여 인스턴스를 초기화한다.
하지만 인스턴스를 생성하고 반환하는 코드는 보이지 않는다.