次のようにメソッドを呼び出すことができる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)
います。 これは、を呼び出すようなものですが あなたはaudo要素のplay関数を取り、それをwindow.play
、機能しません。window
オブジェクト上で実行するように強制しています。 window
はaudo要素ではないため、エラーが発生します。
次の行に沿って何かを使用する必要があります
var sound = voice[ 'blessed be' ];
setTimeout( sound.play.bind( sound ), 1000 );