我有一个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 );