在课堂上使用nextTick

时间:2012-12-16 13:50:34

标签: oop node.js coffeescript

如果我有这样的代码:

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的方法时)?

2 个答案:

答案 0 :(得分:5)

通常的做法是将this的引用存储在一个局部变量中,该变量将在匿名函数中可用。在JavaScript中:

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

CoffeeScript有一个特殊的语法来帮助解决这个问题。 “fat arrow”:

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

答案 1 :(得分:0)

使用=>代替->来保存this变量。

class SomeClass
  constructor: =>
    @someAttr = false

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