자, 먼저 위 코드의 반복을 줄여 리펙토링을 하고 싶다🤦♂️
반복을 줄이기 위해서 prototype
로 메서드를 이동시켰다
✨ prototype
로 메서드를 이동시켜 instancce의 __proto__
로 접근이 가능해졌다.
🤷♀️ 그러나, 위 상황에서 __proto__
를 명시적으로 표기해 setOler, getAge 메서드에 접근하는 경우, this가 가리키는 값은 __proto__
가 된다.
그러므로 이렇게 접근 할 경우 NaN이 나온다
하지만 우리는 앞서 살펴봤듯 __proto__
가 생략 가능하다는 것을 안다.
그렇기에 __proto__
를 생략하여 마치 자신의 것처럼 메서드를 호출할 수 있게 해준다.
이렇게 되면 this
는 gomu를 가리키게 되고 정상적으로 출력이 가능하게 된다.
prototype
의 age
property
가 있을 경우그러나, prototype
의 age라는 property가 있다고 가정하면, 결과가 달라진다.
__proto__
를 명시적으로 표기한 setOlder, getAge 메서드의 경우, this
가 __proto__
를 가리키므로 getAge는 101을 출력하게 된다.
반면 __proto__
를 명시적으로 표기하지 않은 setOlder, getAge 메서드의 경우, this
가 gomu를 가리키므로 getAge는 31을 출력하게 된다.
메서드 호출시에 this가 어떻게 바인딩되는지를 상기하면 당연한 결과일 것이다.