Skip to content
On this page

JavaScript 프로퍼티 섀도잉

수정하기
문서 생성 2021-05-16 22:17:16 최근 수정 2021-09-15 22:18:19
On this page
const Person = (function () {
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function () {
console.log(`Hello, My Name is ${this.name}`);
};
return Person;
}());
const me = new Person('padosum');
me.sayHello = function () {
console.log(`🤙 Hello, My Name is ${this.name}`)
};
me.sayHello(); // 🤙 Hello, My Name is padosum
  • 생성자 함수로 객체를 생성하고 프로토타입 프로퍼티와 같은 이름의 프로퍼티를 인스턴스에 추가하면, 프로토타입 프로퍼티에 덮어쓰는 것이 아니라 인스턴스 프로퍼티로 추가된다.
    • 여기서 인스턴스의 sayHello는 프로토타입 메서드 sayHello를 오버라이딩1했다.
    • 이렇게 상속관계에 의해 가려지는 현상을 프로토타입 섀도잉이라고 한다.
  • 오버라이딩1은 하지만 하위 객체를 통해 상위 프로퍼티를 set할 수는 없다. 프로토타입 체인으로 접근하는게 아니라 프로토타입에 직접 접근해야 한다.

reference


1 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 방식