더북(TheBook)

공장 함수에서 객체를 생성할 때마다 attack() 메서드도 같이 생성됩니다. attack() 메서드는 모든 객체에서 똑같은데도 계속 메서드를 새로 만드니 매우 비효율적입니다. 이럴 때는 attack() 메서드를 createMonster 함수 외부로 빼서 재사용하면 새로 생성되는 객체가 attack() 메서드를 공유합니다.

function attack(monster) {
  monster.hp -= this.att;
}
function createMonster(name, hp, att) { 
  return { 
    name, hp, att,
    attack,
  };
}
const monster1 = createMonster('슬라임', 25, 10);
const monster2 = createMonster('슬라임', 26, 9);
monster1.attack === monster2.attack; // true
monster1;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.