在我实例化我的课程之后,我调用了myClass.testScope()
,它调用了类中的另一个函数。但是,当我将该函数作为参数传递时,我失去了范围并从testScopeFromPassedParam
调用data1
会导致错误 未捕获TypeError:对象[object global]没有方法&# 39; testScopeFromPassedParam'
有人可以帮助解决这个问题吗?
class MyClass
test: () ->
@testScope()
testScope: () ->
console.log 'worky'
testScopeFromPassedParam: () ->
console.log 'no worky'
data1: (cb) ->
# Shoot. The error.
@testScopeFromPassedParam()
setTimeout (->
cb '1'
), 1000
data2: (cb) ->
setTimeout (->
cb '2'
), 3000
loadData: () ->
getDeferred = (someFunction) ->
deferred = $.Deferred()
someFunction (data) ->
console.log data
deferred.resolve()
deferred
dataFunctions = [
@data1
@data2
]
arrayOfPromises = [ ]
for someFunction in dataFunctions
arrayOfPromises.push getDeferred(someFunction)
$.when.apply(null, arrayOfPromises).done () =>
alert 'returned'
myClass = new MyClass()
myClass.testScope()
myClass.loadData()
答案 0 :(得分:1)
那不是[变量]范围,这是this
context在这里丢失的。您需要将函数绑定到您的对象,在coffeescript中,您可以使用fat-arrow syntax:
data1: (cb) =>
@testScopeFromPassedParam()
…
顺便说一句,你真的应该将data
传递给解析函数(或者只使用somefunction deferred.resolve
)