프로토타입
JavaScript는 프로토타입 기반 언어(prototype-based language)이다.
프로토 타입 기반 언어라는 것은 모든 객체들이 메소드와 속성들을 상속 받기 위한 템플릿으로써 프로토타입 객체(prototype object)를 가진다는 의미이다.
[[prototype]] 링크
자바스크립트의 모든 객체는 자신의 부모인 프로토타입 객체를 가리키는 참조 링크 형태의 숨겨진 프로퍼티가 있다. ECMA Script에서는 이러한 링크를 implicit prototype link(암묵적 프로토타입 링크)라고 부른다.
이 링크를 [[prototype]]이라고 표현한다.
prototype
모든 객체는 자신을 생성한 생성자 함수의 prototype 프로퍼티가 가리키는 객체를 자신의 [[prototype]]링크로 연결한다.
예시
const a = { b : 1 };
console.dir(a);
다음과 같은 코드를 콘솔로 찍어보면 아래와 같다.
a에는 b라는 값이 들어있다.
이 b를 a라는 객체의 속성(property)이라고 부른다.
그 밑에 [[prototype]]에는 Object가 들어있다.
이 객체는 리터럴 방식으로 생성되었다.
(리터럴 방식이란 위와같이 a = { } 방식으로 객체를 생성하는 것을 말한다.)
javascript에서는 리터럴로 객체를 생성하면 내부적으로 Object 생성자 함수에 new를 붙여서 객체가 생성된다.
생성자 함수의 prototype을 자식의 [[prototype]]이 가리키므로, a는 Object의 메소드와 속성을 상속받는다.
예를 들어, a는 Object의 속성인 toString을 사용할 수 있다.
a.toString();
이러한 상속은 프로토타입 체이닝에 의해 가능하다.
https://wouldyou.tistory.com/30
정리
1. prototype은 자신의 프로토타입 객체를 가리킨다. 생성자 함수를 통해 생성시, 자식의 [[prototype]]링크가 자신의 prototype 객체를 가리키게 된다.
2. [[prototype]]링크는 부모의 prototype객체를 가리킨다.
'javascript' 카테고리의 다른 글
[javascript] 상속 구현하기 (0) | 2021.12.30 |
---|---|
[javascript] 프로토타입 체이닝이란? (0) | 2021.12.20 |
[javascript] javascript에서 private 사용하기, javascript 공개, 비공개 메소드 만들기 (0) | 2021.11.10 |
[javascript] object에서 key값에 접근할 때 오류, object[" "]형식으로 접근하기 (0) | 2021.10.22 |
JavaScript Closures MDN 예제 해석 (0) | 2021.09.10 |