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)います。 これは、を呼び出すようなものですがwindow.play、機能しません。 あなたはaudo要素のplay関数を取り、それを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 に答える