강의

멘토링

커뮤니티

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

alice님의 프로필 이미지
alice

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

클래스와 상속에 대한 질문입니다.

해결된 질문

작성

·

266

·

수정됨

0

첫번째 질문


class Monster {
  power = 10;

  constructor(aaa) {
    this.power = aaa;
  }

  attack = () => {
    console.log("공격하자!!");
    console.log(`내 공격력은 ${this.power} 이야`);
  };

  run = () => {
    console.log("도망가자!!");
  };
}

const mymonster1 = new Monster(20);
mymonster1.attack();
mymonster1.run();

const mymonster2 = new Monster();
mymonster2.attack();
mymonster2.run();
//터미널

공격하자!!
내 공격력은 20 이야
도망가자!!
공격하자!!
내 공격력은 undefined 이야
도망가자!!

위와 같이 new Monster 하면서 생성자에 power 값을 넘겨주지 않으면 undefined 이 찍히는데,

저렇게 생성자가 있는 상황에서, 기본적으로 class 안에서 설정해 준 power 값 power = 10;을 이용하려면 어떻게 해야 하나요?

 


 

두번째 질문

class Monster {
  power = 10;

  constructor(aaa) {
    this.power = aaa;
  }

  attack = () => {
    console.log("공격하자!!");
    console.log("내 공격력은 " + this.power + " 이야!!!");
  };
}

class SkyMonster extends Monster {
  run = () => {
    console.log("날라서 도망가자!!");
  };
}

class GroundMonster extends Monster {
  run = () => {
    console.log("뛰어서 도망가자!!");
  };
}

const skymonster = new SkyMonster(10);
skymonster.attack();
skymonster.run();

const groundmonster = new GroundMonster(30);
groundmonster.attack();
groundmonster.run();
class Monster {
  power = 10;

  constructor(aaa) {
    this.power = aaa;
  }

  attack = () => {
    console.log("공격하자!!");
    console.log("내 공격력은 " + this.power + " 이야!!!");
  };
}

class SkyMonster extends Monster {
  constructor(qqq) {
    super(qqq);
  }

  run = () => {
    console.log("날라서 도망가자!!");
  };
}

class GroundMonster extends Monster {
  constructor(www) {
    super(www);
  }

  run = () => {
    console.log("뛰어서 도망가자!!");
  };
}

const skymonster = new SkyMonster(10);
skymonster.attack();
skymonster.run();

const groundmonster = new GroundMonster(30);
groundmonster.attack();
groundmonster.run();
//터미널
공격하자!!
내 공격력은 10 이야!!!
날라서 도망가자!!
공격하자!!
내 공격력은 30 이야!!!
뛰어서 도망가자!!

위의 코드를 아래 코드로 바꾸면서 부모 생성자로 값을 넘겨주는 방법을 알려주셨는데

터미널에 찍히는 결과는 똑같은데 왜 저렇게 부모 생성자로 값을 넘겨줘야 하는지 이유를 잘 모르겠습니다.

답변 1

1

안녕하세요. Sophia님

  1. 매개변수에 기본값을 지정하는 방법을 학습해 보시길 바랍니다. 아래 링크를 참고해 보시길 바랍니다.
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/Default_parameters

  2. 동일한 결과가 발생하는 이유는 생성자 함수가 생략 가능 하기 때문입니다. constructor에 대해 학습해 보세요.
    또한 부모 클래스에서 상속된 자식 클래스에서 새로운 속성을 정의하기 위해 super 키워드를 사용합니다. 이 때, 부모 클래스를 호출하지 않게 되면 this에 대한 참조 에러가 발생하기 때문입니다.
    자바스크립트 Class에 대해 학습해 보시길 바랍니다.
    https://poiemaweb.com/es6-class

감사합니다.

alice님의 프로필 이미지
alice

작성한 질문수

질문하기