객체 상속(__proto__, Object.create)

2023. 2. 2. 14:48

보통의 객체 지향 언어에서의 상속은 서브 클래스가 상위 클래스의 기능을 물려 받기 위해서

서브 클래스가 상위 클래스의 자식이 되어야 한다.

그리고 이렇게 만들어진 서브 클래스를 통해 객체를 생성한다.

 

하지만 자바스크립트의 경우 서브 오브젝트(객체)가 상위 오브젝트의 기능을 물려 받기 위해서

서브 오브젝트가 상위 오브젝트의 자식이 될 수 있다(객체끼리 바로 상속이 가능).

 

만약 상속을 받고 있는 서브 객체가 다른 객체로부터 상속을 받고 싶다면 링크만 바꿔주면 된다.

이 링크를 prototype link라고 한다. 그리고 prototype link가 가리키고 있는 객체를 prototype object라고 한다.

 

 

__proto__

__proto__라는 prototype link를 이용해서 객체를 상속받을 수 있다.

var paimon = {before:'cute'}
var paimonPlus = {after:'chatterbox'}

paimonPlus.__proto__ = paimon;
console.log(paimonPlus.before);
console.log(paimonPlus.after);

 

실행결과

__proto__는 이제 사용하지 않는다.

대신 Obeject.getPrototypeOf()를 사용한다.

자세한 내용은 아래 링크 참조.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

 

Object.prototype.__proto__ - JavaScript | MDN

주의: 객체의 [[Prototype]]을 변경하는 것은 최신 JavaScript 엔진이 속성 접근을 최적화하는 방식의 특성상 모든 브라우저 및 JavaScript 엔진에서 매우 느린 작업입니다. 상속 구조를 변경하는 것이 성

developer.mozilla.org

 

 

Object.create

Object.create를 사용해서 객체를 상속하는 새로운 객체를 만들 수 있다.

Object.create의 인자로 부모로 지정할 객체를 넣으면 된다.

var paimon = {before:'cute'}
var paimonPlus = Object.create(paimon);
paimonPlus.after = 'chatterbox';

console.log(paimonPlus.before);
console.log(paimonPlus.after);

 

실행결과


부스트코스의 강의 내용을 정리한 포스트입니다.

https://www.boostcourse.org/cs124

 

자바스크립트의 시작

부스트코스 무료 강의

www.boostcourse.org

'공부 > JavaScript' 카테고리의 다른 글

prototype과 __proto__  (0) 2023.02.06
call, bind  (0) 2023.02.06
super  (0) 2023.02.02
클래스  (0) 2023.02.02
프로토타입(prototype)  (0) 2023.01.31

BELATED ARTICLES

more