0
class Example
  constructor: ->
    $.each [1, 2, 3], (key, value) ->
      @test = value
    return @test
  render: ->
    alert @test

example = new Example()
example.render()​​​​​​​​​​​​​​​​​​​​​​

私はCoffeeScript(+ jQuery)を使用しています。これは、@test変数で値3を取得するクラスの例です。しかし、これは起こりません、あなたは私を助けることができますか?

4

1 に答える 1

3

これはスコープの問題です。スコープ $.each内にある関数を受け入れるため、this変数は期待したものではありません。

作業コード:

class Example
  constructor: ->
    $.each [1, 2, 3], (key, value) =>
      @test = value
    return @test
  render: ->
    alert @test

example = new Example()
example.render()​​​​​​​​​​​​​​​​​​​​​​

何が変わったの?通話の矢印を確認してください$.each。太い矢印になりました。太い矢印は、_this変数を設定し@...、スコープを期待どおりにするために使用するときに使用するというトリックを実行します。

詳細については、「関数のバインド」セクションのhttp://coffeescript.orgを確認してください。

于 2012-04-09T12:49:54.193 に答える