我有一个audio
标签的引用,play
我可以像这样调用它的方法:
voice["blessed be"].play()
如果我尝试这样称呼它:
setTimeout(voice["blessed be"].play, 1000)
我得到:
Uncaught TypeError: Illegal invocation
我不一定会setTimeout
在最终实现中使用;但是,为什么这不起作用?
我有一个audio
标签的引用,play
我可以像这样调用它的方法:
voice["blessed be"].play()
如果我尝试这样称呼它:
setTimeout(voice["blessed be"].play, 1000)
我得到:
Uncaught TypeError: Illegal invocation
我不一定会setTimeout
在最终实现中使用;但是,为什么这不起作用?
这是因为如何setTimeout
调用它的回调。它调用上下文设置为的回调函数window
。
所以,它在调用voice["blessed be"].play.call(window)
. 这就像 call 一样 您正在使用 audo 元素的播放功能,并强制它在window.play
,不起作用。window
对象上运行。 window
不是 audo 元素,因此您会收到错误消息。
你需要使用一些类似的东西
var sound = voice[ 'blessed be' ];
setTimeout( sound.play.bind( sound ), 1000 );