prototype chaining

이홍경·2021년 8월 22일
0
post-thumbnail

객체 prototype chaining mechanism

모든 객체에는 __proto__ 라는 속성이 있다.
이 속성은 어떤 객체를 가리킨다. 그것은 모든 객체의 조상인 Object 이다.
자바스크립트는 객체에 있는 메소드에 찾는 메소드가 있는지 찾은 뒤 없다면
__proto__가 가리키고 있는 객체에 접근해 그 메소드가 있는지 확인한다.

const a1 = {
  name: 'Hulk',
  power: 120
}
const a2 = {
  name: 'Tony',
  money: 'infinite'
}
const a3 = {
  name: 'Thor',
  girlfriend: 'Mjolnir'
}
a1.__proto__ = a2;
console.log(a1.money) // 'infinite'
//a1에는 money라는 속성이 없다. a1의 __proto__가 가리키고 있는 객체에서 속성을 찾는다. 있다. 출력된다.
a2.__proto__ = a3;
console.log(a1.girlfriend) // 'Mjolnir'
// a1에 없다 a1.__proto__와 연결된 a2에서 찾는다. 없다. a2.__proto__와 연결된 a3에서 찾는다. 있다.

*객체는 자신이 필요한 메소드만 가지고 있고, 공통적으로 사용될 만한 것들은 상위 객체에서 프로토타입으로 연결시켜 재활용할 수 있는 프로토타입 메카니즘.

함수 prototype mechanism

function printName(name) {
  this.name = name;
}// prototype이라는것을 가진다. 객체이며 그 함수 자체를 가리킨다.
const n = new printName('chris');
console.log(n.name) // 'chris'
printName.prototpye.weapon = 'shield'
console.log(n) // name: 'chris'
console.log(n.weapon) // 'shield'

printName도 일반 객체이기 때문에 .__proto__를 가지고 있고,
new 연산자가 내부적으로 this.__proto__ = printName.prototype; 이렇게 연결시켜 준다.
*n에는 weapon이라는 속성이 없다. 연산자로 만들어진 부모의 __proto__ 값을 조회한다.
부모의 __proto__은 new 연산자가 prototype과 연결해 주었다.
printName.prototype.weapon으로 속성 값을 추가 했기 때문에 그 값을 자식이 찾을 수 있다.

profile
개발자를 꿈꾸는 자

0개의 댓글