半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

arrow functionでハマる

function O () {    
  this.value = 200

  // Type A
  this.f = () => {
    console.log(this.value)
  }
}

// Type B
O.prototype.g = () => {    
  console.log(this.value)
}

var obj = new O()
obj.f() //=> 200
obj.g() //=> undefined

今までずっとTypeBのスタイルでクラスを表現していたけど(arrow functionではない),arrow functionに変えたらインスタンスの値にアクセスできなくてハマった.

アロー関数はそのコンテキストの this の値を捕捉する

ので,Type Bだと自分の値を参照できないっぽい.Type Aで定義したらうまくいく.

文献

追記

id:EBAGmasaさんのご意見

babel使うんだったら,ES6のクラス記法で書くのがよさ

確かに...

id:mimorisuzukoさんより

Aだとnewするたびに関数定義しちゃうからBで書けって前読んだ

なるほど...

結論

class活用したら良いっぽい