クラス コンストラクタ関数とプロトタイプをクラスに変換、定義、宣言、インスタンス化、メソッド、インスタンスプロパティ
入門JavaScriptプログラミング (JD Isaacks(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT6(クラス)、LESSON 27(クラス)、27.8(練習問題)、Q27-1の解答を求めてみる。
コード
class Fish {
constructor(name) {
this.name = name;
this.hunger = 1;
this.dead = false;
this.born = new Date();
}
eat(amount = 1) {
if (this.dead) {
console.log(`${this.name} is dead and can no longer eat.`);
return;
}
this.hunger -= amount;
if (this.hunger < 0) {
this.dead = true;
console.log(`${this.name} has died from over eating.`);
return;
}
}
sleep() {
this.hunger++;
if (this.hunger >= 5) {
this.dead = true;
console.log(`${this.name} has starved.`);
}
}
isHungry() {
return this.hunger > 0;
}
}
const oscar = new Fish('oscar');
console.assert(oscar instanceof Fish);
console.assert(oscar.isHungry());
while (oscar.isHungry()) {
oscar.eat();
}
console.log(!oscar.isHungry());
console.log(!oscar.dead);
oscar.eat();
console.assert(oscar.dead);
入出力結果(Terminal、Zsh)
% node sample.js
true
true
oscar has died from over eating.
%