基本上我需要将参数传递给coffeescript中的匿名函数,而且我已经没有了想法。
这是我的代码:
audio = {
sounds: {},
sources: [{
wind: 'sounds/wind.mp3'
}],
load: (callback) ->
this.totalFiles = Object.size(this.sources[0])
for key of this.sources[0]
sound = new Howl({ src: [this.sources[0][key]] })
self = this
sound.once('load', (key) =>
(key) ->
self.sounds[key] = this
if Object.size(self.sounds) == self.totalFiles
if typeof callback == 'function' then callback()
(key)) <- THIS ARGUMENT PASSING DOES NOT COMPILE CORRECTLY
loop: (name) ->
this.sounds[name].loop(true)
console.log this.sounds
}
使用callback.call()的代码:
load: (callback) ->
this.totalFiles = Object.size(this.sources[0])
for key of this.sources[0]
sound = new Howl({ src: [this.sources[0][key]] })
self = this
sound.once('load', (key) =>
callback.call(() ->
self.sounds[key] = this
if Object.size(self.sounds) == self.totalFiles
if typeof callback == 'function' then callback()
, key)
)
使用callback.call()或callback.apply()我得到相同的结果,相同的编译javascript。我试图在已编译的javascript中添加(key)我需要的地方,并按预期工作。
对象大小:
Object.size = (obj) ->
size = 0
for key in obj then if obj.hasOwnProperty(key) then size++
return size
我在stackoverflow上找到的一个好帮手函数。
答案 0 :(得分:0)
您的代码存在一些可能隐藏真正问题的问题:
self = this
回调sound.once
是一个胖箭头函数,意思是该行
self.sounds[key] = this
这和自己是一样的AFAIK实际问题是你试图打电话给IIFE,而你需要parens:
sound.once('load', ((key) =>
(key) ->
self.sounds[key] = this
if Object.size(self.sounds) == self.totalFiles
if typeof callback == 'function' then callback()
)(key))
除非您过度使用了名称key
。您已经使用名为key的参数部分应用了一个函数,然后返回的函数也采用名为key的参数?这是什么?
答案 1 :(得分:0)
这对我有用:
sound.once('load', ((key) =>
() ->
self.sounds[key] = this
if Object.size(self.sounds) == self.totalFiles
if typeof callback == 'function' then callback()
)(key)
)