자바스크립트 프로토타입

뚜리의 개발일기·2021년 8월 5일

JavaScript

목록 보기
2/3


prototype

자바스크립트의 객체지향을 지탱하고 있는 핵심 개념

자바스크립트를 일반적인 객체지향 언어와 구분하는 개념

프로토타입을 통해 상속이라는 개념을 제공

예제 1)


user 객체를 하나 만들고
user.name을 하면 이름이 나옵니다.

hasOwnProperty는 자신이 가진 프로퍼티를 확인하는 메서드
user 객체에 해당 프로퍼티가 있으면 true, 없으면 false

그러면 hasOwnProperty는 생성한 적이 없는데 어디서 나온 녀석인가??

[[Prototype]]이라는 객체가 바로 프로토타입

객체에서 프로퍼티를 읽으려 하는데 없으면 이곳에서 찾게된다.

만약 hasOwnProperty가 객체 안에 있으면
방금 생성한 메서드로 동작하게된다.

위의 코드처럼 객체에 프로퍼티가 있으면 탐색을 멈추게 된다.

결과적으로 객체 내에 프로퍼티가 없을 때프로토타입에서 프로퍼티를 찾는다.



프로토타입의 동작원리 - 상속

예제 2)

  • 공통 : 바퀴 수, 드라이브 메서드
  • BMW : 네비게이션

지금은 차가 3대 그러나 차들이 늘어날 때마다 새로운 변수를 선언할 것인가??

  • car 라는 상위 객체를 생성하여 공통된 부분을 만들어주고
    bmw, benz, audi객체의 wheelsdrive()를 삭제
  • car가 bmw, benz, audi의 프로토타입
  • bmw, benz, audi들은 car의 상속을 받음

모든 객체는 __proto__를 통해 자신의 프로토타입([[Prototype]] 내부 슬롯)에 접근할 수 있다.


bmw에서 wheels를 찾으면 먼저 bmw객체 내부에서 찾고
없으면 프로토타입에서 확인
프로토타입을 열어보면
drive()wheels 프로퍼티가 있다.




프로토타입 체이닝

예제 3)

상속은 계속 이어진다!!!

이번에는 bmw를 상속받는 x5객체를 생성

여기서 x5의 color와 name은 객체 내에 있어서 값을 주고 탐색을 멈춘다.

그리고 navigation을 해도 값이 잘 나온다.

  • x5에서 navigation을 찾는데 없으면 프로토타입인 bmw에서 탐색하여 찾고 멈춘다.

  • 만약 x5에서 drive()를 찾을려면, x5에 없어서 프로토타입인 bmw로 올라간다.
    그런데도 없어서 bmw의 프로토타입인 car까지 올라가서 찾고 멈춘다.

이를 프로토타입 체인이라고 한다!!




감사합니다 🤯


유투버 '코딩앙마' 님의 영상을 참고하여 공부하기 위해 포스팅하였습니다.

3개의 댓글

comment-user-thumbnail
2021년 8월 7일

프로토타입 개념 익히기 좋은 글이네요! 잘보았습니다 감사합니다😊

답글 달기
comment-user-thumbnail
2021년 8월 8일

세림님 글에서 음성지원 되는 거 같아요
그리고 덧붙이자면 저 프로토타입 개념 진짜 하나도 몰랐는데 세림님 덕에 이제 발끝이라도 이해하는 수준으로 성장했씁니다.. 감사함니다❤🙆‍♀️

답글 달기
comment-user-thumbnail
2021년 11월 19일

정리를 잘해주셔서 프로토타입과, proto, 프로토타입의 체이닝이 어떻게 찾고 가는지 쉽게 알 수 있었어요!

답글 달기