누가봐도 인생 1회차의 기록장

개발공부/JavaScript 책

인사이드 자바스크립트 #09 (프로토 타입 체이닝)

김놀먹 2021. 11. 2. 15:22

프로토타입의 두가지 의미

자바스크립트의 모든 객체는 자신의 부모인 프로토타입 객체를 가리키는 참조 링크  형태의 숨겨진 프로퍼티가 있다. 이러한 링크를 암묵적 프로토타입 링크implicit prototype link 라고 부르며 이러한 링크는 모든 객체의 [[Prototype]] 프로퍼티에 저장된다.  

주의해야 할 점은 prototype 프로퍼티와 객체의 숨은 프로퍼티인 [[Prototype]] 링크를 구분해야 한다는 점이다. 자바스크립트에서 모든 객체는 자신을 생성한 생성자 함수의 prototype 프로퍼티가 가리키는 프로토타입 객체를 자신의 부모 객체로 설정하는 [[Prototype]] 링크로 연결한다.


객체 리터럴 방식으로 생성된 객체의 프로토타입 체이닝

자바스크립트에서 객체는 자기 자신의 프로퍼티뿐만 아니라, 자신의 부모 역할을 하는 프로토타입 객체의 프로퍼티 또한 마치 자신의 것처럼 접근하는게 가능하다. 이것을 가능케 하는 게 바로 프로토타입 체이닝이다. 

  • hasOwnProperty() 메서드 : 호출한 객체에 인자로 넘긴 문자열 이름의 프로퍼티나 메서드가 있는지 체크하는 자바스크립트 표준 API

생성자 함수로 생성된 객체의 프로토타입 체이닝

자바스크립트에서 모든 객체는 자신을 생성한 생성자 함수의 prototype 프로퍼티가 가리키는 객체를 자신의 프로토타입 객체 (부모 객체)로 취급한다.


프로토타입 체이닝의 종점

자바스크립트에서 Object.prototype 객체는 프로토타입 체이닝의 종점이다. 객체 리터럴 방식이나 생성자 함수 방식에 상관없이 모든 자바스크립트 객체는 프로토타입 체이닝으로 Object.prototype 객체가 가진 프로퍼티와 메서드에 접근하고, 서로 공유가 가능하다.


기본 데이터 타입 확장~객체의 프로퍼티 읽기나 메서드를 실행할 때만 프로토타입 체이닝이 동작한다

해당 부분 이해가 안되는 관계로 다른 공부를 추가로 한 다음에 돌아와서 다시 보는 걸로..^^