강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

gigo96님의 프로필 이미지
gigo96

작성한 질문수

[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문

셀프 체크 - 기타 기능 구현하기

let으로 구조분해할당을 했을 때 궁금한 점이 생겼습니다!

작성

·

186

0

 

else if (input === '3') { // 도망
let { monster } = this;
monster = null;
this.updateMonsterStat();
this.changeScreen('game');
this.showMessage(`무사히 ${this.monster.name}에게서 도망쳤습니다!`);
}
위와 같은 코드에서 this.updateMonsterStat()을 하면 텍스트를 지워주지 않는 것인지 궁금합니다!
 
배틀 부분에서 도망을 구현하고 있었습니다. 근데 습관적으로 구조분해할당을 const로 하고 monster를 null로 바꾸려고 하니 오류가 발생했습니다. 그래서 아무 생각 없이 let으로 구조분해할당을 했습니다. 그런데 여기서 monster = null을 한뒤 this.updateMonsterStat()을 했을 때 당연히 맨 아래 몬스터에 관련된 텍스트가 지워질 줄 알았는데, 지워지지 않았습니다. 그래서 monster.hp -= 10을 해봤더니 이거는 또 동작을 해서 혼란스럽습니다... 이 부분은 어떠한 문제가 있는 건가요??

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

원형을 생각하세요.

let monster = this.monster입니다.

monster = null 해봤자 this.monster는 그대로입니다.

this.monster = null 해야 합니다.

gigo96님의 프로필 이미지
gigo96
질문자

답변 감사합니다!

그런데 

if (input === '1') { // 공격
const { hero, monster } = this;
hero.attack(monster);
monster.attack(hero);
if (hero.hp === 0) {
alert(`You Died! 다시 시작하세요.`);
this.quit();
} else if (monster.hp === 0) {
this.showMessage(`${monster.name}(을/를) 잡았습니다! ${monster.xp}(을/를) 얻었습니다!`);
hero.getXp(monster.xp);
this.monster = null;
this.changeScreen('game');
} else {
this.showMessage(`${hero.att}의 데미지를 주고, ${monster.att}의 데미지를 받았다.`);
}
this.updateHeroStat();
this.updateMonsterStat();
console.log(this.hero.hp, hero.hp);
}
여기서는 어떻게 this.hero.hp와 hero.hp가 동일 한건지 이해가 잘 안됩니다 ㅠㅠ
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

const hero = this.hero 이니까 this.hero.hp와 hero.hp가

동일합니다.

다만 hero = null로 한다고 this.hero가 null이 되진 않습니다. 자바스크립트 기본 참조 특성이라고 보시면 됩니다.

gigo96님의 프로필 이미지
gigo96
질문자

아아 감사합니다 ㅠㅠ 항상 좋은 강좌 잘 보고 있습니다.

gigo96님의 프로필 이미지
gigo96

작성한 질문수

질문하기