我有一个我不明白的范围问题。

我有一些方法使用此对象:

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)(假设fileInfoFileInfo的实例)。

它丢失了您期望的this绑定(即该函数执行时的this值,不要与execution context混淆,请参见注释),因为您没有立即调用它,只需传递一个引用即可。

关于javascript - 原型(prototype)和async.forEach的范围问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13224663/

10-09 22:29