모던 자바스크립트 딥다이브 스터디 #4-2 (CH 19 프로토타입)
객체 생성 방식은 다양하다..
하지만 어떤 방식으로 객체를 생성하든 전에 언급한 추상연산 OrdinaryObjectCreate에 의해 생성된다는 것은 동일하다. 이 친구는 빈 객체를 생성하고 만약 프로퍼티 목록도 전달받은 경우 이 빈객체에 프로퍼티를 추가해 반환한다. 또한 생성할 객체의 프로토타입을 인수로 전달받고 자신이 생성한 객체의 [[Prototype]]슬롯에 추가하는 식으로 동작한다.
💡 아래를 참고하는것도 좋아보인다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
JS는 객체의 프로퍼티(메서드 포함)에 접근하려고 할때 해당 객체에 접근하려는 프로퍼티가 없다면 [[Prototype]]내부 슬롯의 객체를 따라 올라가며 해당 프로퍼티가 있는지 검색한다. 이를 프로토타입 체인이라고 한다. JS는 이 방식으로 객체지향의 다형성과 상속을 구현한다.
프로토타입의 최상위에는 언제나 Object.prototype이 위치하고 있다. 모든 객체는 Obejct.prototype을 상속받는다. 따라서 Object.prototype을 프로토타입 체인의 종점이라고도 한다. Object.prototype의 [[Prototype]]에는 null이 들어가있다.
참고로 이 종점까지 검색했는데도 프로퍼티를 찾지 못하면 에러가 발생하는게 아니라 undefined가 반환될 뿐이니 주의하자.
💡 프로퍼티가 아닌 식별자라면 스코프 체인에서 검색한다.