생성자 함수란 new 연산자오 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다.

 

new연산자와  Object 생성자 함수를 사용하면 빈 객체를 만들 수 있다.

Object 말고도 Number, String, Boolean, Function, Array, RegExp, Date 등의 빌트인 생성자 함수가 있다.

 

  • 복습 질문 1) new를 붙이지 않고도 생성자 함수를 생성하는 빌트인 생성자 함수는 무엇일까?

 

생성자 함수를 쓰는 이유는 객체는 편리하지만 값이 다른 같은 구조의 프로퍼티를 가진 객체가 많이 필요할 경우 너무 많은 동일 구조 객체를 많들어야 할 수도 있다. 생성자 함수는 이런 상황을 막아준다.

 

this 바인딩은 인스턴스와 연결 된다. 바인딩이란 식별자와 값을 연결하는 과정을 말하며 this는 인스턴스를 가리키고, 빈 객체에 프로퍼티나 메서드를 추가할 수 있다.

 

  • 복습 질문 2) 생성자 함수가 아닌 함수에서 this를 쓰면 어떻게 될까? 
  • 복습 질문 3) 인스턴스 반환은 어떻게 될까? return 이 있을 때와 없을 때 어떤 차이가 있을까

 

함수 역시 객체이므로 일반 객체가 가진 내부슬롯과 내부메서드를 가진다. 여기서 함수와 일반객체의 차이는 호출이 가능하다는 것이다. 따라서 함수만 가지는 내부슬롯과 내부메서드 [[Call]], [[construct]] 를 가진다. 

 

[[Call]]은 함수 호출을 할 때 호출된다.

[[Construct]]는 생성자 함수로서 호출할 때 호출된다.

 

함수 객체라면 호출 가능하여야 하므로 모두 callable 하며 함수 종류에 따라 constructor 과 non-constuctor로 나뉜다.

 

  • 복습 질문 4) constructor 함수와  non-constuctor은 무엇이 있을까?

 

new.target은 생성자함수로서 호출되었는지 아닌지 확인할 수 있다. 생성자 함수로 호출되었다면 new.target은 함수 자신을 가리킨다. 일반 함수로 호출 되었다면 new.target의 내부는 undefined 이다.

  • 복습 질문 5) new.target을 이용해 생성자 함수인지 검사하고 아니라면 생성자 함수로 만드는 방법은 무엇일까?
  • 복습 질문 6)new.target이 없다면 위의 상황을 어떻게 해결할까?

+ Recent posts