프론트엔드/JS

12. 프로토타입 #2

2023. 3. 16. 11:14

프로토타입 #1 에 이어서 정리를 하려한다.

 

함수 객체의 Prototype 프로퍼티

함수 객체만이 소유하는 prototype 프로퍼티는

생성자 함수가 생성할 인스턴스의 프로토타입을 가리킴.

 

 

생성자 함수로서 호출할 수 없는 함수, 즉 non-constructor 인 화살표함수, ES6 메서드 축약표현으로 

정의한 메서드는 prototype프로퍼티를 소유하지 않으며 프로토타입도 생성하지 않음

 

 

생성자 함수로 호출하기 위해 정의하지 않은 일반 함수(함수 선언문, 함수 표현식)도

prototype 프로퍼티를 소유하지만 객체를 생성하지 않는 일반 함수의 prototype 프로퍼티는 의미가없다.

 

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

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

하지만 사용하는 주체가 다르다.

 

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

 

 

 

 

프로토타입 체인

 

 

위의 예제를 보면 Person 생성자함수에 의해 생성된 me 객체는

Object.prototype의 메서드인 hasOwnProperty를 호출할 수 있다.

이것은 me 객체가 Person.prototype뿐 아니라 Object.prototype도 상속받은걸 의미

 

 

 

자바스크립트는 특정 객체의 프로퍼티나 메소드에 접근시 객체 자신의 것뿐 아니라

__proto__ 접근자 프로퍼티가 가리키는 링크를 따라서

자신의 부모 역할을 하는 프로토타입 객체의 프로퍼티나 메서드를 접근

 

즉, 특정 객체의 프로퍼티나 메소드 접근시 만약 현재 객체의

해당 프로퍼티가 존재하지 않는다면,

__proto__가 가리키는 링크를 따라 부모역할을 하는

프로토타입 객체의 프로퍼티나 메서드를 차례로 검색하는 것

 

쉽게 말하면, 인스턴스 객체의 key에 접근할 때, 해당 객체에게 key가 없다면

그 다음으로 상위 프로토타입(원형) 속성에서 key가 있는지 확인한다.
없다면 그것을 찾기 위해 더 상위의 프로토타입(부모)에서 찾는다.

 

그것이 바로!! 프로토타입 체인!

 

 

프로토타입 체인의 특징 :

  • 모든 프로토타입 체이닝의 종점은 Object.prototype 이다.
  • 하위 객체는 상위 객체의 프로퍼티나 메서드를 상속받는 것이 아니라 공유
  • 해당 객체에 없는 프로퍼티나 메서드를 접근할 때 프로토타입 체이닝이 일어남

 

'프론트엔드/JS' 카테고리의 다른 글
  • 14. 콜백함수, 프로미스, async/await
  • 13. 동기와 비동기, 블로킹과 논블로킹
  • 11. 프로토타입 #1
  • 10. 객체 지향, 클래스와 인스턴스
plla2
plla2
프론트엔드 개발자가 되고픈 개미의 일대기 🐜
plla2
코린이 "개미"의 개발블로그
plla2
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프론트엔드 (40)
      • CSS (1)
      • JS (16)
      • React (17)
      • Redux (2)
      • TS (4)
      • Pre-project (0)
    • 프로젝트 회고, 리팩토링 (14)
      • 포트폴리오 프로젝트 (2)
      • moviepop 팀 프로젝트 (1)
      • lofi 프로젝트 (2)
      • 스택오버플로우 팀 프로젝트 (5)
      • commerce 프로젝트 (1)
    • 코테 (26)
      • koans, 코플릿, sprint (9)
      • 데일리 코딩 (17)
    • 백엔드 (5)
      • Node (4)
    • CS (6)
      • 알고리즘 (2)
      • 자료구조 (1)
      • 네트워크 (1)
    • 회고, 면접준비 (16)
      • Next.js Doc 번역 (7)
      • 면접 답변용 정리 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • js
  • 중첩구조분해
  • 프로토타입 체인
  • camelCase
  • 렉시컬
  • 동기 비동기
  • 리액트 라우터
  • 상태
  • React
  • 단어의 시작
  • 구조 분해 할당
  • 비동기
  • Twittler
  • 블로킹 논블로킹
  • 페이지네이션
  • State
  • 정규식
  • 객체분해
  • 프로토타입
  • 배열렌더링
  • 태그래핑
  • 배열분해
  • 트리 자료구조
  • HTMLCollection
  • NodeList
  • 데일리 코딩
  • dom
  • 프론트엔드
  • 데일리코딩
  • 클래스형

최근 댓글

최근 글

hELLO · Designed By 정상우.
plla2
12. 프로토타입 #2
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.