ここにCoffeeScriptの初心者がいます。配列にプッシュし、クラスのメンバー関数内で実行した関数のスコープに奇妙な問題があります。基本的に、this
正しく設定されていないようです。
class TestClass
constructor: ->
@functions = [] # my array of functions
@member = "hello there! come find me!"
update: =>
func() for func in @functions
testClass = new TestClass
testClass.functions.push( ->
str = "could i find @member? " + @member? + "; this's keys: " + Object.keys(this)
console.log(str)
)
testClass.update()
結果?奇妙なことに、それは次のとおりです。
could i find @member? false; this's keys:
top,location,window,external,chrome,v8Locale,document,$,jQuery,CoffeeScript
関数が呼び出されているコンテキストが間違っているようです。スキニー矢印関数を配列にプッシュすることで、その関数が呼び出されたときに、それが呼び出されたコンテキストを採用すると考えました ( update
、どこthis
にあるtestClass
) 私がそうすれば、すべてうまくいきます:
update: =>
func.call(this) for func in @functions
しかし、それはあまり CoffeeScript の慣用句ではないようです。