3

我有一个audio标签的引用,play我可以像这样调用它的方法:

voice["blessed be"].play()

如果我尝试这样称呼它:

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

我得到:

Uncaught TypeError: Illegal invocation

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

4

2 回答 2

1

这是因为如何setTimeout调用它的回调。它调用上下文设置为的回调函数window

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

于 2012-06-10T06:13:34.173 回答
0

你需要使用一些类似的东西

var sound = voice[ 'blessed be' ];
setTimeout( sound.play.bind( sound ), 1000 );
于 2014-10-29T06:14:57.553 回答