次のようにメソッドを呼び出すことができる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 );