LoginSignup
0

More than 5 years have passed since last update.

ES2015 フレンズ(相手のすべてを受け入れる関数の作成)

Last updated at Posted at 2017-02-13

仕様

  • 全てを肯定するメッセージを返す。
  • 実行時の引数で出力する技能を渡せる。
  • メソッドチェーンで賞賛してもらえる技能の変更が可能。

サンプルコード

シンプル

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の勉強にもなった。

リンク

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0