모던 자바스크립트 딥다이브 스터디 #4-2 (CH 19 프로토타입)

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

객체 생성 방식은 다양하다..

  1. 객체 리터럴
  2. Object 생성자 함수
  3. 생성자 함수
  4. Object.create메서드
  5. 클래스

하지만 어떤 방식으로 객체를 생성하든 전에 언급한 추상연산 OrdinaryObjectCreate에 의해 생성된다는 것은 동일하다. 이 친구는 빈 객체를 생성하고 만약 프로퍼티 목록도 전달받은 경우 이 빈객체에 프로퍼티를 추가해 반환한다. 또한 생성할 객체의 프로토타입을 인수로 전달받고 자신이 생성한 객체의 [[Prototype]]슬롯에 추가하는 식으로 동작한다.

프로토타입 체인

💡 아래를 참고하는것도 좋아보인다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

Untitled

JS는 객체의 프로퍼티(메서드 포함)에 접근하려고 할때 해당 객체에 접근하려는 프로퍼티가 없다면 [[Prototype]]내부 슬롯의 객체를 따라 올라가며 해당 프로퍼티가 있는지 검색한다. 이를 프로토타입 체인이라고 한다. JS는 이 방식으로 객체지향의 다형성과 상속을 구현한다.

프로토타입의 최상위에는 언제나 Object.prototype이 위치하고 있다. 모든 객체는 Obejct.prototype을 상속받는다. 따라서 Object.prototype을 프로토타입 체인의 종점이라고도 한다. Object.prototype의 [[Prototype]]에는 null이 들어가있다.

참고로 이 종점까지 검색했는데도 프로퍼티를 찾지 못하면 에러가 발생하는게 아니라 undefined가 반환될 뿐이니 주의하자.

💡 프로퍼티가 아닌 식별자라면 스코프 체인에서 검색한다.