[解決済み] 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
のようなインスタンスのフィールドにアクセスしたり、他のインスタンスメソッドを呼び出したりすることができません。最後の行は、細い矢印が使用されている場合の回避策です。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン