<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

image.png

생성자 함수의 인스턴스 생성 과정

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

하지만 인스턴스를 생성하고 반환하는 코드는 보이지 않는다.