- 생성자의 의의는 재사용할 수 있는 객체 생성 코드를 구현하는 것이다.
- 모든 함수는 생성자 함수가 될 수 있다.
- 함수 이름의 첫 글자는 대문자로 시작한다.
- 반드시
new
연산자를 붙여서 실행한다.
- 빈 객체를 만들어
this
에 할당한다.- 함수 본문을 실행 후
this
에 새로운 프로퍼티를 추가해this
를 수정한다.this
를 반환한다.
new User(…)
실행 예제
function User(name) {
// this = {}; (빈 객체가 암시적으로 만들어짐)
// 새로운 프로퍼티를 this에 추가함
this.name = name;
this.isAdmin = false;
// return this; (this가 암시적으로 반환됨)
}
재사용할 필요가 없는 복잡한 객체는 익명 생성자 함수를 사용하여 💊 코드를 캡슐화할 수 있음.
let user = new function() {
this.name = 'John';
this.isAdmin = false;
// 사용자 객체를 만들기 위한 여러 코드
// 지역 변수, 복잡한 로직, 구문 등의
// 다양한 코드가 여기에 들어갑니다.
};
생성자 함수엔 보통 return
문이 없다.
반환해야 할 것들은 모두 this
에 저장되고 this
는 자동으로 반환되기 때문에 반환문을 명시적으로 써 줄 필요가 없다.
- 객체를
return
한다면this
대신 객체가 반환된다.- 원시형을
return
한다면return
문은 무시된다.
string
, number (en-US)
, bigint (en-US)
, boolean
, undefined
, symbol
, null
객체 return 예제
function BigUser() {
this.name = '원숭이';
return { name: '고릴라' }; // this가 아닌 새로운 객체를 반환함
}
alert( new BigUser().name ); // 고릴라
원시형 return 예제
function SmallUser() {
this.name = '원숭이';
return; // this를 반환함
}
alert ( new SmallUser().name); // 원숭이
생성자 함수를 사용하면 매개변수를 이용해 객체 내부를 자유롭게 구성할 수 있고 유연성이 확보된다.
function User(name) {
this.name = name;
this.sayHi = function() {
alert( '제 이름은 ' + this.name + '입니다.' );
};
}
let sy = new User('오선영');
sy.sayHi(); // 제 이름은 오선영입니다.