1. ホーム
  2. coffeescript

[解決済み] CoffeeScript, 太い矢印(=>)を矢印(->)に使う場合とその逆の場合

2022-06-01 20:39:39

質問

CoffeeScriptでクラスを作成する場合、すべてのインスタンスメソッドを => ("fat arrow")演算子を使って定義し、すべての静的メソッドは -> 演算子で定義されているのですか?

どのように解決するのですか?

いいえ、それは私が使用するルールではありません。

私が見つけたメソッド定義における太い矢印の主な使用例は、コールバックとしてメソッドを使用したいとき、そのメソッドがインスタンスフィールドを参照するときです。

class A
  constructor: (@msg) ->
  thin: -> alert @msg
  fat:  => alert @msg

x = new A("yo")
x.thin() #alerts "yo"
x.fat()  #alerts "yo"

fn = (callback) -> callback()

fn(x.thin) #alerts "undefined"
fn(x.fat)  #alerts "yo"
fn(-> x.thin()) #alerts "yo"

ご覧のように、fat-arrowを使用しない場合、インスタンスのメソッドへの参照をコールバックとして渡すと問題が発生することがあります。これは、fat-arrow がオブジェクトのインスタンスを this にバインドするのに対し、細い矢印はそうしないため、上記のようにコールバックとして呼ばれる細い矢印のメソッドは @msg のようなインスタンスのフィールドにアクセスしたり、他のインスタンスメソッドを呼び出したりすることができません。最後の行は、細い矢印が使用されている場合の回避策です。