JavaScript 문법 - 메서드 상속 및 동작원리(prototype)

백엔드·2020년 11월 22일
0

Javascript 문법

목록 보기
13/16

😎 메서드 상속 및 동작원리에 대해서 알아보자

자, 먼저 위 코드의 반복을 줄여 리펙토링을 하고 싶다🤦‍♂️

반복을 줄이기 위해서 prototype로 메서드를 이동시켰다

prototype로 메서드를 이동시켜 instancce의 __proto__로 접근이 가능해졌다.

🤷‍♀️ 그러나, 위 상황에서 __proto__를 명시적으로 표기해 setOler, getAge 메서드에 접근하는 경우, this가 가리키는 값은 __proto__가 된다.

그러므로 이렇게 접근 할 경우 NaN이 나온다

하지만 우리는 앞서 살펴봤듯 __proto__생략 가능하다는 것을 안다.

그렇기에 __proto__를 생략하여 마치 자신의 것처럼 메서드를 호출할 수 있게 해준다.

이렇게 되면 this는 gomu를 가리키게 되고 정상적으로 출력이 가능하게 된다.


🎬 prototypeage property가 있을 경우

그러나, prototype의 age라는 property가 있다고 가정하면, 결과가 달라진다.

__proto__를 명시적으로 표기한 setOlder, getAge 메서드의 경우, this__proto__를 가리키므로 getAge는 101을 출력하게 된다.

반면 __proto__를 명시적으로 표기하지 않은 setOlder, getAge 메서드의 경우, this가 gomu를 가리키므로 getAge는 31을 출력하게 된다.

메서드 호출시에 this가 어떻게 바인딩되는지를 상기하면 당연한 결과일 것이다.

ref

profile
백엔드 개발자

0개의 댓글