모자딥 17장 생성자 함수에 의한 객체 생성

릿·2023년 2월 1일
0

17장 생성자 함수에 의한 객체 생성

17.1 Object 생성자 함수


  • new연산자와 함께 Object생성자 함수를 호출하면 빈 객체를 생성해서 반환함
  • 생성자 함수를 통해 생성된 객체를 인스턴스라고 함

17.2 생성자 함수


17.2.1 객체 리터럴에 의한 객체 생성 방식의 문제점

직관적이고 간편하지만 동일한 프로퍼티를 갖는 객체를 여러개 생성해야할 경우는 비효율적임

17.2.2 생성자 함수에 의한 객체 생성 방식의 장점

프로퍼티 구조가 동일한 객체 여러개를 간편하게 생성할 수 있다.

// 생성자 함수
function Circle(radius) {
  this.radius = radius;
  this.getDiameter = function () {
    return 2 * this.radius;
  };
}

// 인스턴스 생성
const circle1 = new Circle(5); // 반지름이 5인 Circle 객체 생성
const circle2 = new Circle(10); // 반지름이 10인 Circle 객체 생성

new연산자와 함께 호출하면 해당 함수는 생성자 함수로 동작한다.

17.2.3 생성자 함수의 인스턴스 생성 과정

  • 생성자 함수의 역할 : 인스턴스 생성, 생성된 인스턴스를 초기화
  1. 인스턴스 생성과 this바인딩
  2. this가 바인딩 되어 있는 인스턴스를 초기화
  3. 바인딩된 this가 암묵적으로 반환됨

17.2.4 내부 메서드 [[Call]]과 [[Construct]]

  • 함수가 일반 함수로서 호출 : [[Call]]이 호출됨
  • 함수가 생성자 함수로서 호출 : [[Construct]]가 호출됨

17.2.5 constructor와 non-constructor의 구분

  • constructor : 함수 선언문, 함수 표현식, 클래스
  • non-constructor : 메서드(ES6 메서드 축약표현), 화살표 함수

17.2.6 new연산자

생성자 함수는 일반 함수와 구분하기 위해 보통 파스칼 케이스로 명명함

17.2.7 new.target (ES6)

  • this와 유사하게 constructor인 모든 함수 내부에서 암묵적인 지역 변수와 같이 사용되며 메타 프로퍼티라고도 불림

호출 방법에 따른 new.target바인딩

  • new연산자와 함께 생성자 함수로서 호출 : 함수 자신을 가리킴
  • 일반 함수로서 호출 : undefinded
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글