我有一个我不明白的范围问题。
我有一些方法使用此对象:
FileInfo = (file) ->
@name = path.basename(file.path);
FileInfo::uploadImage = (filename, callback) ->
FileInfo::handleImage = (version, callback) ->
# Here I would like to call uploadImage
我从async.forEach循环中调用handleImage:
async.forEach options, fileInfo.handleImage, (err) -
我想从handleImage内调用uploadImage,但得到TypeError:Object#没有方法'uploadImage'
我已经在handleImage中尝试了以下内容:
this.uploadImage
以及:
that = this
that.uploadImage
都不起作用。
如果我在forEach循环之外调用fileInfo.handleImage,则可以使用this或that正常工作。
最佳答案
将fileInfo.handleImage
更改为fileInfo.handleImage.bind(fileInfo)
(假设fileInfo
是FileInfo
的实例)。
它丢失了您期望的this
绑定(即该函数执行时的this
值,不要与execution context混淆,请参见注释),因为您没有立即调用它,只需传递一个引用即可。
关于javascript - 原型(prototype)和async.forEach的范围问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13224663/