티스토리 뷰

일반 함수와 생성자 함수를 구분하기위해 생성자 함수는 첫 문자를 대문자로 기술한다.

 

이런 위험을 방지하는 또 다른 방법으로는 new.target이 있다.

생성자 함수가 new 연산자 없이 호출되는 것을 방지하기 위해 ES6에서는 new.target을 지원한다.

 

함수 내부에서 new.target을 사용하면 new 연산자와 함께 생성자 함수로 호출되었는지 확인할 수 있다.

생성자 함수로서 호출되었다면 new.target은 함수 자신을 가리킨다.

new 연산자 없이 일반 함수로서 호출된 함수 내부의 new.target은 undefined다.

// 생성자 함수
function Square(side) {
  // new 연산자와 호출되지 않는 경우 new.target은 undefined다.
  if(!new.target) {
    return new Square(side);
  }
  this.side = side;
  this.getArea = function() {
    return this.side * this.side;
  };
}

const square = Square(4);
console.log(square.getArea());

따라서 new.target을 사용해 new연산자와 생성자 함수로서 호출됐는지 확인할 수 있다.

또한, 생성자 함수로서 호출되지 않은 경우 재귀 호출을 통해 호출할 수 있다.

 

 

new.target은 IE(인터넷 익스플로어)에서는 지원하지 않는다.

댓글