我有一個範圍問題,我不明白。原型和async.forEach的範圍問題
我有一些方法,這個對象:
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關鍵字不是「context」。函數的'this'綁定被設置爲建立[*執行上下文*](http://ecma-international.org/ecma-262/5.1/#sec-10.3)的一個組件,並且完全由該調用設置或使用['bind'](http://ecma-international.org/ecma-262/5.1/#sec-15.3.4.5)。 – RobG
@RobG您不認爲將它引用爲* context *對於JavaScript經驗較少的人(我認爲是OP)更容易? – alex
不是,因爲他們認爲它與*函數被調用(即實際上下文)相關,而不是*如何被調用。此外,ECMA-262僅使用與「執行上下文」相關的詞語「上下文」,而不是「this」。 – RobG