如果我有这样的代码:
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的方法时)?
答案 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