for in hasOwnProperty

lee jae hwan·2022년 7월 26일

javascript

목록 보기
48/107

객체간 상속관계를 형성하는 것은 상위객체의 프로퍼티를 내것처럼 사용해야할 필요가 있기 때문이다.

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
  }
}

0개의 댓글