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 웹 문서