使用音频元素的播放方法作为setTimeout的回调,为什么不呢?

时间:2012-06-10 06:10:13

标签: javascript settimeout html5-audio

我引用了audio标记,我可以这样调用play方法:

voice["blessed be"].play()

如果我试着这样称呼它:

setTimeout(voice["blessed be"].play, 1000)

我明白了:

Uncaught TypeError: Illegal invocation

我不一定会在最终实施中使用setTimeout;但是,为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

这是因为setTimeout调用其回调的方式。它调用回调函数,并将上下文设置为window

所以,它正在调用voice["blessed be"].play.call(window)这就像调用window.play一样,它不起作用。你正在使用audo元素的play函数,并强制它在window对象上运行。 window不是audo元素,因此您会收到错误。

答案 1 :(得分:0)

你需要使用

的内容
var sound = voice[ 'blessed be' ];
setTimeout( sound.play.bind( sound ), 1000 );