리터럴
객체 생성자 함수 ? new 함수( )
| 함수 호출 방식 | this 바인딩 |
|---|---|
| 일반 함수 호출 | 전역 객체 |
| 메서드 호출 | 메서드 호출한 객체 |
| 생성자 함수 호출 | 생성자 함수가 생성할 인스턴스 |
생성자 함수로 인스턴스 생성 시에는 return 을 쓰지않아도 됨
자바스크립트 엔진은 함수 정의를 평가하여 함수객체를 생성할 때, 함수의 위치가 아닌 정의 방식에 따라 둘을 구분한다.
constructor
// 함수 선언문
function foo(){}
// 함수 표현식
const go = function(){};
// 프로퍼티의 값으로 할당된 함수
const person = {
x: function(){}
};
new foo(); // foo {}
new go(); // go {}
new person.x(); // x{}
non-constructor
// 화살표 함수
const arrow =()=>{};
new arrow(); //TypeError: arrow is not a constructor
// 메서드 정의: ES6 메서드 축약 표현만 메서드로 인정한다.
const obj={
x(){} //축약 전 x: function() {}
};
new obj.x(); //TypeError: obj.x is not a constructor
Constructor 는 구분이 용이하도록 이름을 PascalCase 로 작성한다