TIL 19

모모·2021년 12월 13일
0

TIL

목록 보기
19/28

Grub

class Grub {
  constructor(age, color, food){
    this.age = 0,
    this.color = "pink",
    this.food = "jelly"
  }

  eat(){
    return 'Mmmmmmmmm jelly'
  }
}

module.exports = Grub;

Bee

const Grub = require('./Grub');

class Bee extends Grub {
  constructor(age, color, job){
    super(),
    this.age = 5,
    this.job = "Keep on growing",
    this.color = "yellow"
  }
}

module.exports = Bee;

ForagerBee

const Bee = require('./Bee');

class ForagerBee extends Bee {
  // Bee뿐 아니라 Grub에서도 상속받지만 Bee 자체가 Grub의 하위 클래스이기 때문에 따로 적어주지 않아도 된다.
  constructor(age, job, canFly, treasureChest){
    super(), // 아래 명시한 속성외에 Grub과 Bee가 가지고 있는 속성을 다 상속받는다
    this.age = 10,
    this.job = "find pollen",
    this.canFly = true,
    this.treasureChest = []
  }

  forage(treasure) {
    this.treasureChest.push(treasure)
  }
}

module.exports = ForagerBee;

HoneyMakerBee

const Bee = require('./Bee');

class HoneyMakerBee extends Bee{
  constructor(age, job, honeyPot){
    super(),
    this.age = 10,
    this.job = "make honey",
    this.honeyPot = 0
  }

  makeHoney(){
    this.honeyPot += 1
  }
  giveHoney(){
    this.honeyPot -= 1
  }
}

module.exports = HoneyMakerBee;

궁금한 점

  1. super 함수에는 뭐가 들어있길래 호출만 하면 상속이 되는걸까?
    -> 상위 클래스의 속성과 메소드가 담겨있다.

  2. 상위 클래스로부터 상속받아서 이용하고 싶은 속성이 있을 때, 해당 속성을 하위 클래스의 생성자 함수의 인자로서 제외, 혹은 포함시키는 것 중 어느 것이 바람직한 작성법인가?
    -> super()안에 넣어주는 것이 명시적으로 좋다.

알게된 것

  1. 생성자에서 super 키워드는 this 키워드가 사용되기 전에 호출되어야 한다.
  2. extends를 사용하면 자동으로 super()를 사용한 것과 같은 동작이 이루어지지만 명시성을 위해 super()를 적어주는 것이 좋다.

0개의 댓글