[javascript] 프로토타입 체인에서 메소드 평가 순서

자바스크립트에서 객체 간 상속은 프로토타입 체인을 통해 이루어집니다. 이때 메소드는 프로토타입 체인을 따라 검색됩니다. 그렇다면 메소드의 평가 순서는 어떻게 이뤄지는지 알아봅시다.

1. 메소드 평가 순서

1.1. 자신의 프로퍼티에서 메소드를 검색

메소드 호출 시, 먼저 해당 객체의 프로퍼티에서 메소드를 검색합니다.

const obj = {
  sayHello() {
    return "Hello!";
  }
};

console.log(obj.sayHello()); // "Hello!"

1.2. 프로토타입 체인에서 상위 프로토타입으로 이동하여 메소드를 검색

만약 해당 객체에서 메소드를 찾을 수 없다면, 프로토타입 체인을 따라 상위 프로토타입에서 메소드를 검색합니다.

function Greeting() {}
Greeting.prototype.sayHello = function() {
  return "Hello!";
};

const obj = new Greeting();

console.log(obj.sayHello()); // "Hello!"

1.3. 최상위 프로토타입까지 검색하고 찾지 못한 경우, undefined 반환

프로토타입 체인을 따라 최상위 프로토타입까지 검색하였으나 메소드를 찾을 수 없는 경우, undefined를 반환합니다.

function Parent() {}
Parent.prototype.sayHello = function() {
  return "Hello from Parent!";
};

function Child() {}
Child.prototype = Object.create(Parent.prototype);

const obj = new Child();

console.log(obj.sayHello()); // "Hello from Parent!"

2. 결론

메소드 호출 시, 해당 객체의 프로퍼티부터 검색하고, 없다면 프로토타입 체인을 따라 상위 프로토타입까지 검색하여 메소드를 평가하며, 최상위 프로토타입까지 검색하고도 메소드를 찾을 수 없다면 undefined를 반환합니다.

이러한 평가 순서를 이해하면 프로토타입 체인에서 메소드가 어떻게 검색되고 호출되는지 더 잘 이해할 수 있습니다.

참고 자료