자바스크립트에서 상속은 어떻게 이루어 지는걸까?
자바스크립트는 프로토타입 기반 언어라고하는데 프로토타입이 뭘까??
읽기 귀찮은 사람은 맨마지막 요약만 보세요.
Java, Python같이 객체지향언어에서 클래스는 빠질 수없는 개념이다
프로토타입
이 존재한다상속
을 흉내낸다.프로토타입 기반의 언어에서는 어떤 객체를 원형(prototype)으로 삼고 이를 복제하여 상속의 효과를 얻는다
프로토 타입은 prototype (object + link) 이다. 이게 무슨말인지 하나씩 알아보자
객체는 언제나 함수로 생성된다
function Person() {
this.eye = 2
this.nose = 1
} // => 함수
var personObject = new Person(); // => 함수로 객체를 생성
var obj = {}
var obj = new Object() // -> JS에서 기본적으로 제공하는함수
Constructor 자격 부여
해당 함수의 Prototype object 생성 및 연결
Contructor
와 _proto_
(링크)를 가진다prototype
이라는 속성을 통해 Prototype Object
에 접근할 수 있다 __proto__
)아래의 경우 kim에는 eyes라는 속성이 없는데도 kim.eyes는 2라는 값을 가져온다.
Prototype Object의 eyes 속성을 참조한 것인데 이것을 __proto__
가 가능하게 해준다
prorotype 속성은 함수만 가지고 있다. 하지만 proto 속성은 모든 객체가 가지고 있는 속성이다.
proto 는 객체가 생성될때 조상이었던 함수의 Prototype Object 를 가리킨다
즉, kim객체의 proto 는 Person함수의 Prototype을 가르키게 되는 것이다.
Kim객체는 eye를 안가지고 있기때문에 상위 프로토타입을 탐색한다.
최상위인 Object의 Prototype Object까지 도달했는데 못찾을 경우 Undefined
를 리턴한다.
이렇게 __proto__
로 상위 프로토타입과 연결되어있는것을 프로토타입 체인
이라고 한다.
**참고 : __proto__
는 생략가능하다. 그리하여 kim._proto__.eyes 외에 kim.eyes도 같은 것을 가르키는 것이다.
prototype object(constructor, __proto__)
도 같이 생성된다.prototype
속성으로 prototype object
에 접근 할 수 있다constructor
을 통해 child
를 만들 수 있다child
는 __proto__
를 통해 상위 prototype
에 접근할 수 있다prototype
의 메소드를 사용할 수 있게 된다.prototype chain
이다.**참고: https://medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67