LoginSignup
0
0

More than 5 years have passed since last update.

備忘録 Javascript classについての疑問

Last updated at Posted at 2018-09-08

Javascriptのclassの実装について疑問があったので、コードを書いて検証した。

疑問点

  1. 属性と同名のgetterが書けるのか?
  2. 引数付きのgetterは書けるのか?
  3. 引数ありと引数なしの同名のmethodを書けるのか?
class Test {
  constructor(val) {
    this.attr1 = val; //---(1)
  }
  get attr1() {
    return this.attr1;
  }
  get attr2(val) {  //---(2)
    return Number(val) * this.attr1;
  }
  func1() {
    return this.attr1;
  }
  func1(val) {   //---(3)
    return this.attr1 / Number(val);
  }
}

結果は、

  1. 属性と同名のgetterが書けるのか? →書けない

    (1)のところでエラーとなる。

    TypeError: Attempted to assign to readonly property.

    なるほど、そう解釈しているんだ!

  2. 引数付きのgetterは書けるのか? →書けない

    (2)のところでエラーとなる。

    [Error] SyntaxError: Unexpected identifier 'val'. getter functions must have no parameters.

    書けると便利な場面があるんだけどな!

  3. 引数ありと引数なしの同名のmethodを書けるのか? →書けるけど動きが違う

    書くには書けるが期待した動作にならず。引数あり/なしのどちらで呼び出しても、(3)のメソッドが呼ばれる。つまり後勝ちってことだろう。

まとめ

上記はどれも、Javascriptには「型」の概念がない(まったく無い訳ではないが、ほぼほぼ無いに等しい)ことに起因していると考えると、どの結果も「なるほど、そっかー」の結果であった。実行時エラーとなってくれたらよいが、しれっと動くとバグに気付かず悩むことに・・・。

誤って同名のメソッドを定義してしまい、期待通りに動かずに悩んだ経験がある。同名関数は気を付けないと・・・。ドキュメントを書かずに直接コードを書いている時点でダメかも。

0
0
0

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
0