[ 모던 자바스크립트 스터디 ] 왜 __proto__ 접근자 프로퍼티를 통해 접근하는가?

2022. 10. 2. 09:41·Archive/Develop
728x90
반응형

[[Prototype]] 내부 슬롯의 값, 즉 프로토타입에 접근하기 위해 접근자 프로퍼티를 사용하는 이유는

상호 참조에 의해 프로토타입 체인이 생성되는 것을 방지하기 위해서다.

 

const parent = {};
const child = {};

child.__proto__ = parent;
parent.__proto__ = child; // TypeError: Cyclic __proto__ value

 

 

프로토타입 체인은 단방향 링크드 리스트로 구현이 되어야한다.

따라서 순환 참조하는 프로토타입 체인이 만들어지면 프로토타입 체인의 종점이 없기 때문에

프로퍼티를 검색할 때 무한 루프에 빠질 수 있다.

 

따라서 체크 없이 무조건적으로 프로토타입을 교체할 수 없게끔

__proto__ 접근자 프로퍼티를 통해 프로토타입에 접근해 교체하도록 구현되어 있는 것이다.

 

 

사실 모던자바스크립트 딥다이브 책에서도 __proto__ 접근자 프로퍼티를 코드 내에서 직접 사용하지 말라 권고한다.

 

 

 

 

함수 객체 prototype 프로퍼티

 

함수 객체만 갖고 있는 prototype 프로퍼티는 함수가 생성할 인스턴스의 프로토타입을 가리킨다.

 

(function () {}).hasOwnProperty('prototype'); // true

({}.hasOwnProperty('prototype'); //false

 

 

prototype 프로퍼티는 생성자 함수가 생성할 인스턴스의 프로토타입을 가리켜서,

화살표함수는 prototype 프로퍼티를 소유하지도 않고, 프로토타입도 생성하지 않는다.

 

 

모든 객체가 가지고 있는 __proto__ 접근자 프로퍼티와

함수 객체만 가지고 있는 prototype 프로퍼티는 결국 동일한 프로토타입을 가리킨다.

 

하지만 이 둘은 프로퍼티를 사용하는 주체가 다르다는 걸 알고 있어야한다.

 

 

구분 소유 값 사용 주체 사용 목적
__proto__ 접근자 프로퍼티 모든 객체  프로토타입의 참조 모든 객체 객체가 자신의 프로토타입에 접근 또는 교체하기 위해 사용
prototype 프로퍼티 constructor 프로토타입의 참조 생성자 함수 생성자 함수가 자신이 생성할 객체의 프로토타입을 할당하기 위해 사용

 

 

function Person(name) {
	this.name = name;
}

const me = new Person('Hong');

console.log(Person.prototype == me.__proto__); // true

 

 

Person 함수의 prototype 은 결국 해당 함수의 객체(인스턴스) 가 갖는 __proto__ 와 동일한 프로토타입을 가리킨다.

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ 모던 자바스크립트 스터디 ] 프로토타입 - 1  (0) 2022.10.02
[ 모던 자바스크립트 스터디 ] strict mode  (0) 2022.10.02
[ NestJS ] 의존성 문제 발생 케이스 기록  (0) 2022.09.28
[ 모던 자바스크립트 스터디 ] 프로토타입  (0) 2022.09.28
[ 모던 자바스크립트 스터디 ] 함수와 일급 객체  (1) 2022.09.25
'Archive/Develop' 카테고리의 다른 글
  • [ 모던 자바스크립트 스터디 ] 프로토타입 - 1
  • [ 모던 자바스크립트 스터디 ] strict mode
  • [ NestJS ] 의존성 문제 발생 케이스 기록
  • [ 모던 자바스크립트 스터디 ] 프로토타입
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    oracle db
    코드업 기초
    자바스크립트 객체
    Python
    자바스크립트 API
    Codeup
    파이썬 기초
    백준 파이썬
    javascript
    Oracle
    C++
    백준
    카카오 100일 프로젝트
    파이썬 알고리즘
    오라클
    파이썬 문제
    자바스크립트
    코드업 파이썬 기초 100제
    비박스
    백준 문제풀이
    장고
    파이썬 기초 문제
    Git
    파이썬
    Django
    백준 풀이
    docker
    보안뉴스
    파이썬 백준
    코드업
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ 모던 자바스크립트 스터디 ] 왜 __proto__ 접근자 프로퍼티를 통해 접근하는가?
상단으로

티스토리툴바