我引用了audio
标记,我可以这样调用play
方法:
voice["blessed be"].play()
如果我试着这样称呼它:
setTimeout(voice["blessed be"].play, 1000)
我明白了:
Uncaught TypeError: Illegal invocation
我不一定会在最终实施中使用setTimeout
;但是,为什么这不起作用?
答案 0 :(得分:1)
这是因为setTimeout
调用其回调的方式。它调用回调函数,并将上下文设置为window
。
所以,它正在调用voice["blessed be"].play.call(window)
。 这就像调用你正在使用audo元素的play函数,并强制它在window.play
一样,它不起作用。window
对象上运行。 window
不是audo元素,因此您会收到错误。
答案 1 :(得分:0)
你需要使用
的内容var sound = voice[ 'blessed be' ];
setTimeout( sound.play.bind( sound ), 1000 );