new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다. 빈 객체를 생성한 이후 프로퍼티 또는 메서드를 추가하여 객체를 완성할 수 있다.
// 빈 객체 생성
const person = new Object();
// 프로퍼티 추가
person.name = 'Lee';
person.sayHello = function (){
console.log('Hi! name is' + this.name);
}
console.log(person);
person.sayHello();
// string
const strObj = new String('lee'); // object
console.log(strObj) // String {"lee"}
// Function
const func = new Function('x', 'return x * x'); // function
console.log(func) // f anonymous(x)
생성자 함수는 프로퍼티 구조가 동일한 객체 여러개를 간편하게 생성할 수 있다.
// 생성자 함수
function circle(radius){
this.radius = radius;
this.getD = function(){
return 2 * this.radius
}
}
// 인스턴스 생성
const circle1 = new Circle(5);
const circle2 = new Circle(10);
new연산자와 함께 함수를 호출하면 해당 함수는 생성자 함수로 동작한다. 내부 메서드 Construct가 호출된다. 반대로 new연산자 없이 함수를 호출하면 일반함수(Call)가 호출된다.
new.target은 this와 유사하게 Constructor인 모든 함수 내부에서 암묵적인 지역 변수와 같이 사용되며, new연산자와 함께 생성자 함수로서 호출되면 함수 내부의 new.target은 자기자신을 가르킨다. new연산자 없이 호출되면 undefined이다.