Language | Basic/JavaScript

[JavaScript 스터디] 프로토타입

주정용 2021. 1. 30. 19:35
728x90
  • 자바스크립트는 프로토타입을 기반으로 상속을 구현
  • 상위 객체의 역할 --> 공유 프로퍼티 제공
  • 객체 리터럴 객체의 프로토타입 --> Object.prototype
  • 생성자 함수에 의한 객체으 프로토타입 --> 생성자 함수의 prototype에 바인딩된 객체
  • 모든 객체는 하나의 프로토타입을 보유함
  • 모든 객체는 __proto__를 통해서 자신의 [[prototype]](프로토타입)에 접근
  • 객체의 __proto__Object.prototype.__proto__
  • 함수 객체는 객체중 유일하게 prototype 프로퍼티를 가지고 있음 --> 생성자 함수가 생성할 인스턴스의 프로토타입
  • 모든 객체의 __proto__와 함수 객체의 prototype는 가리키는 대상이 같음. 사용 주체가 다를 뿐(전자는 객체 자신, 후자는 생성자 함수)
  • 모든 프로토타입은 constructor 프로퍼티를 보유함
  • 프로토타입과 생성자 함수는 언제나 공존함 --> 단독으로 존재할 수 없음
    • 따라서 Non-constructor는 프로토타입이 생성되지 않음

프로토타입 생성 시점

  • 프로토타입은 생성자 함수가 생성되는 시점에 함께 생성됨
  • constructor는 함수 객체를 생성하는 시점에 생성되는데, 프로토타입도 생성됨

객체 생성 방식, 프로토타입 결정

  • 모든 객체는 자바스크립트 엔진의 추상 연산 OrdinaryObjectCreate에 의해 생성됨
  • OrdinaryObjectCreate는 생성할 객체의 프로토타입을 인수로 받음
    • 객체 리터럴, Object 생성자 함수의 객체 생성 --> Object.prototype
    • 생성자 함수의 객체 생성 --> 생성자 함수의 prototype 프로퍼티가 참조하고 있는 객체

프로토타입 체인

  • 프로토타입의 프로토타입은 언제나 Object.prototype --> 프로토타입의 종점
  • 자바스크립트는 객체의 프로퍼티를 참조할 때, 객체에 참조하려는 프로퍼티가 없으면 [[prototype]]을 참조하여 프로토타입의 프로퍼티 탐색 반복
  • 프로토타입 체인은 상속과 프로토타입 검색 메커니즘 <--> 스코프 체인은 식별자 검색 메커니즘

instanceof 연산자

  • 좌변 객체가 우변 생성자 함수에 의해 생성된 인스턴스인지 판별
  • 우변 생성자 함수의 prototype 프로퍼티가 좌변 객체의 프로토타입 체인에 존재하면 true

직접 상속

  • Object.create 메서드
    • 첫번째 매개변수 : 생성할 객체의 프로토타입 대상 객체
    • new 연산자 없이 객체 생성
    • 프로토타입 지정하면서 객체 생성
    • 객체 리터럴 객체도 상속받을 수 있음

정적 프로퍼티

  • 인스턴스를 생성하지 않아도 참조, 호출할 수 있는 프로퍼티
  • 생성자 함수가 생성한 인스턴스로 참조할 수 없음

학습 도서

  • '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&linkClass=3314&barcode=9791158392239