holdanddeepdive/javascript-deep-dive

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

Opened this issue · 0 comments

인스턴스 생성과 바인딩

new 연산자 유무에 따른 바인딩

  • 생성자함수는 말그대로 객체(인스턴스)를 생성한다.
  • 연산자 없이 호출하면 일반 함수로서 호출되기 때문에 바인딩이 달라진다.
    (바인딩은 함수 호출 방식에 따라 동적으로 결정된다.)
예시 new 연산자 유무 함수 호출 방식 this 바인딩
new foo() O 생성자 함수로서 호출 함수가 생성할 인스턴스
foo() X 일반 함수로서 호출 전역 객체

인스턴스 생성과정

  1. 인스턴스 생성: 빈 객체가 생성된다.
  2. this 바인딩: 빈 객체가 this에 바인딩된다. 이 처리는 런타임 이전에 실행된다.
  • this는 키워드로 분류되지만 식별자 역할을 한다.
  1. 인스턴스 초기화: 개발자가 코드를 쓴 대로 초기화 된다.
  2. 인스턴스 반환: 완성된 인스턴스가 바인딩된 this가 반환된다.
  • 생성자 내부에서 return으로 다른 값을 반환하면 4번째 동작인 인스턴스(this) 반환을 방해한다.
  • 동작상 우선시 되는 순서
    • 명시적으로 객체 반환 > this 반환(기본 동작) > 원시값 반환