[javascript] 객체의 프로퍼티와 메서드의 상속 가능 여부

JavaScript의 객체는 프로퍼티와 메서드를 상속받을 수 있습니다. 그러나, 모든 프로퍼티와 메서드가 상속될 수 있는 것은 아닙니다. 이 글에서는 JavaScript 객체의 프로퍼티와 메서드의 상속 가능 여부에 대해 알아보겠습니다.

1. 상속 가능한 프로퍼티

JavaScript의 객체는 부모 객체의 프로퍼티를 상속받을 수 있습니다. 모든 객체는 부모 객체인 프로토타입 객체를 가지고 있으며, 이를 통해 프로퍼티를 상속받을 수 있습니다. 예를 들어, Object.prototype 객체에 정의된 toString 메서드는 모든 JavaScript 객체가 상속받는 프로퍼티입니다.

const obj = {};
console.log(obj.toString()); // Object.prototype에 정의된 toString 메서드를 상속받아 호출

2. 상속 불가능한 프로퍼티

그러나, JavaScript 객체는 일부 프로퍼티를 상속받을 수 없습니다. 예를 들어, 부모 객체의 프로퍼티가 non-enumerable일 경우, 해당 프로퍼티는 상속되지 않습니다. 또한, Symbol을 키로 사용하는 프로퍼티도 상속되지 않습니다.

3. 상속 가능한 메서드

JavaScript의 객체는 부모 객체의 메서드를 상속받을 수 있습니다. 부모 객체의 프로토타입 체인을 따라가며 메서드를 상속받을 수 있습니다.

class Animal {
  speak() {
    console.log('Animal speaks');
  }
}

class Dog extends Animal {}

const dog = new Dog();
dog.speak(); // Animal 클래스의 speak 메서드를 상속받아 호출

4. 상속 불가능한 메서드

JavaScript의 객체는 부모 객체의 일부 메서드를 상속받을 수 없을 수 있습니다. 예를 들어, 부모 객체에서 private 메서드로 정의된 것은 자식 객체에서 상속받을 수 없습니다.

결론

JavaScript의 객체는 부모 객체의 프로퍼티와 메서드를 상속받을 수 있습니다. 그러나, 모든 프로퍼티와 메서드가 상속되는 것은 아니며, 일부 프로퍼티와 메서드는 상속받지 못할 수도 있습니다. 상속되는지 여부는 프로퍼티가 enumerable하고 Symbol을 키로 사용하는지 여부, 그리고 메서드가 private한지 여부에 의해 결정됩니다.

참고: MDN 웹 문서