객체간 상속관계를 형성하는 것은 상위객체의 프로퍼티를 내것처럼 사용해야할 필요가 있기 때문이다.
let animal = {
eats: true
};
let rabbit = {
jumps: true,
__proto__: animal
};
rabbit은 animal의 eats속성을 자기속성처럼 사용할 수 있음을 자바스크립트가 보장하는 것이다.
for (const key in rabbit) {
console.log(key); // jump, eats
}
for in 메소드로 객체의 속성을 확인하면 위와같이 상위객체의 속성까지 나온다.
내속성인것처럼 사용할 수 있는 속성은 목록에 나와야 하는것이 맞다.
그렇다면 Object.prototyp객체에 있는 속성들은 왜 안나오는가?
나오는것이 좋을 것으로 생각하는가?
프로퍼티에 enumerable속성이 false라면 열거되지 않는다.
자바스크립트는 hasOwnProperty메소드를 지원함으로써 필요시 구분해서 사용할 수 있도록 하고있다.
let animal = {
eats: true
};
let rabbit = {
jumps: true,
__proto__: animal
};
for(let prop in rabbit) {
let isOwn = rabbit.hasOwnProperty(prop);
if (isOwn) {
alert(`객체 자신의 프로퍼티: ${prop}`); // 객체 자신의 프로퍼티: jumps
} else {
alert(`상속 프로퍼티: ${prop}`); // 상속 프로퍼티: eats
}
}