以下に示すように、クラスプロパティ内にいくつかの関数をネストしたいと思います。
残念ながら、クラスの主なスコープにアクセスすることはできません。coffeescriptクラスのスコープ
各ネストされた関数をthis
への参照を渡さずに解決できますか?提案脂肪の矢印を使用して
class myClass
constructor: -> @errors = []
doSomething: -> @errors.push "I work as expected"
functions:
doStuff: ->
@errors.push "I cant access @errors" # => TypeError: Cannot call method 'push' of undefined
ugly: (context) ->
context.errors.push "It works, but I am ugly" # Works fine but requires scope injection
ノンワーキング代替:
class myClass
constructor: ->
@errors = []
@functions:
doStuff: =>
@errors.push "I wont work either" # TypeError: Cannot call method 'toString' of undefined
グローバルthis.errors
プロパティに書き込みをしないオプションの代替、:JavaScriptでは
class myClass
constructor: ->
@functions =
errors: []
doStuff: ->
@errors.push "I will write to functions.errors only"
コンストラクタのthis/@にバインドしますか? – biziclop
'constructor: - > @errors = [] @functions:doStuff - > ...'を意味しますか? – Industrial
太った矢を使うかもしれない=> http://coffeescript.org/#fat_arrow私はcoffeescriptのマスターではありません、申し訳ありません:) – biziclop