仕様
- 全てを肯定するメッセージを返す。
- 実行時の引数で出力する技能を渡せる。
- メソッドチェーンで賞賛してもらえる技能の変更が可能。
サンプルコード
シンプル
class フレンズ {
constructor(skill) {
this.greetList = ['わーい', 'すごーい', 'たのしー'];
this.フレンズ(skill);
}
フレンズ(skill = '何か') {
this.skill = skill;
return this.setMessage();
}
mes(){
return this.message;
}
setMessage(){
this.message = this.makeMessage();
return this;
}
makeMessage() {
return [...this.greetList, `君は${this.skill}がとくいな、フレンズなんだね!!`].join('\n');
}
toString() {
return this.message;
}
}
console.log(new フレンズ().message);
/*
わーい
すごーい
たのしー
君は何かがとくいな、フレンズなんだね!!
*/
console.log(new フレンズ('ゲーム').mes());
/*
わーい
すごーい
たのしー
君はゲームがとくいな、フレンズなんだね!!
*/
console.log(new フレンズ('パソコン').message);
/*
わーい
すごーい
たのしー
君はパソコンがとくいな、フレンズなんだね!!
*/
console.log(new フレンズ('パソコン').フレンズ('JavaScript').message);
/*
わーい
すごーい
たのしー
君はJavaScriptがとくいな、フレンズなんだね!!
*/
getter, setterパターン
class フレンズ {
constructor(skill) {
this.greetList = ['わーい', 'すごーい', 'たのしー'];
this.フレンズ(skill);
}
フレンズ(skill) {
this.skill = skill;
this.mes = this.skill;
return this;
}
get mes(){
return this.message;
}
set mes(skill) {
this.message = [...this.greetList, `君は${skill}がとくいな、フレンズなんだね!!`].join('\n');
}
get skill(){
return this._skill;
}
set skill(skill = '何か'){
this._skill = skill;
}
toString() {
return this.message;
}
}
console.log(new フレンズ('パソコン').message);
/*
わーい
すごーい
たのしー
君はパソコンがとくいな、フレンズなんだね!!
*/
console.log(new フレンズ('ゲーム').フレンズ('シューティングゲーム').mes);
/*
わーい
すごーい
たのしー
君はシューティングゲームがとくいな、フレンズなんだね!!
*/
得意なことをつなげる
新しい技能を渡されたら、上書きせずに以前渡された技能とつなげてまとめて出力する。
class フレンズ {
constructor(...skill) {
this.greetList = ['わーい', 'すごーい', 'たのしー'];
this._list = [];
this.フレンズ(...skill);
}
フレンズ(...skill) {
this.skillList = skill;
this.skill = this.skillList;
this.mes = this.skill;
return this;
}
get mes() {
return this.message;
}
set mes(skill) {
this.message = [...this.greetList, `君は${skill}がとくいな、フレンズなんだね!!`].join('\n');
}
get skillList() {
return this._list;
}
set skillList(skill) {
this._list = this._list.concat(...skill);
}
get skill() {
return this._skill;
}
set skill(skillList) {
this._skill = skillList.map(v => v + '').filter(v => v.length > 0).join('と') || '何か';
}
toString() {
return this.message;
}
}
console.log(new フレンズ('ゲーム', 'シューティングゲーム').フレンズ('サッカー').mes);
/*
わーい
すごーい
たのしー
君はゲームとシューティングゲームとサッカーがとくいな、フレンズなんだね!
*/
console.log(new フレンズ(['サッカー', '野球']).フレンズ('バスケットボール').フレンズ('テニス').mes);
/*
わーい
すごーい
たのしー
君はサッカーと野球とバスケットボールとテニスがとくいな、フレンズなんだね!!
*/
console.log(new フレンズ('ゲーム', 'シューティングゲーム').フレンズ('サッカー').skillList);
// ["ゲーム", "シューティングゲーム", "サッカー"]
まとめ
- メソッドチェーンの勉強になった。
- getter, setterの勉強にもなった。