0

次のようなコードがある場合:

class SomeClass
  constructor: ->
    @someAttr = false

  someFunction: ->
    process.nextTick ->
      @someAttr = true

obj = new SomeClass
obj.someFunction()
obj.someAttr # Would still be false, because the @ (this) is in the process context

process.nextTick によって、 @someAttr が定義されていない別のコンテキストに導かれるため、機能しません。これを回避するにはどうすればよいですか (また、SomeClass のメソッドを呼び出したい場合)。

4

2 に答える 2

5

thisこれを回避する通常の方法は、匿名関数内で使用できるローカル変数にへの参照を格納することです。JavaScriptの場合:

function someFunction() {
  var self = this;
  process.nextTick(function() {
    self.someAttr = true;
  });
}

CoffeeScriptには、これを支援する特別な構文があります。「太った矢」:

class SomeClass:
  someFunction: ->
    process.nextTick =>
      @someAttr = true
于 2012-12-16T14:08:21.270 に答える
0

変数を保持する=>代わりにを使用します。->this

class SomeClass
  constructor: =>
    @someAttr = false

  someFunction: ->
    process.nextTick =>
      @someAttr = true
于 2012-12-16T14:12:27.090 に答える