
생성자 함수는 객체를 만드는 역할을 하는 함수이다.
어떤 업무의 로직을 실행 시키기 위한 목적이 아니라 객체를 생성하는 목적으로 선언된 함수라는 의미에서 생성자 함수라고 부른다.
일반 함수와는 역할의 차이가 있고 문법적인 차이는 없다.
function User(name, age) { // 생성자 함수의 첫글자는 대문자로!
this.name = name;
this.age = age;
}
new 연산자를 이용해 객체 생성생성자 함수를 호출해서 객체를 생성할 때는 new 연산자를 이용해야 한다.
new는 예약어이며, 객체 생성 연산자라고 부른다.
let user1 = new User('홍길동', 20)
new라는 의미가 객체를 새로 생성하겠다는 것이다.
위의 그림의 작동 순서는 다음과 같다.
this로 멤버들을 등록한다.return을 쓰지 않아도 반환!!)❗️ new를 이용하지 않고 함수를 호출하게 되면 객체를 생성하겠다고 선언한 것이 아니므로 객체가 자동으로 만들어지지 않는다.

new를 이용하지 않으면 this 예약어가 준비되지 않으므로 함수에서 this 이용시 에러가 발생한다.
this 예약어로 객체 멤버 등록함수 내에는 변수와 다른 함수가 선언될 수 있다.
이때 함수가 생성자 함수로 이용된다면 this 예약어로 선언이 되어야 한다.
❗️this 예약어를 사용하지 않은 변수, 함수는 생성되는 객체와 관련 없다.
✔️ this 예약어 사용 안했을 때
✔️ this 예약어 사용 했을 때
일반 함수는 결과 값을 반환하려면 return 예약어를 이용해야 한다.
하지만 생성자 함수는 객체 생성이 주 목적이므로, new 연산자로 함수를 호출하면 return 예약어 없이도 자동으로 반환된다.
그렇다면 생성자 함수에서 return 예약어를 사용하면 어떻게 될까?
✔️ new 로 호출되는 생성자 함수
기초 데이터를 return 시키면 이 반환값은 무시되며, 자동으로 만들어진 객체가 반환된다.
✔️ 생성자 함수
특정 객체를 return 시키면 자동으로 생성된 this 객체는 무시되며, 특정 객체가 반환된다.
생성자 함수로 객체를 생성한 후에 그 객체에 변수, 함수 등을 추가할 수 있다.
멤버를 추가하게 되면 동일한 생성자 함수로 선언된 객체끼리 상이한 멤버를 가지게 할 수 있다.
function User(name, age) {
this.name = name;
this.age = age;
}
let user1 = new User('홍길동', 30)
let user2 = new User('김길동', 20)
console.log(user1);
console.log(user2);
user1.address = 'seoul'
user2.phone = '010-1111-1111'