只是一个简单的问题。
我想为变量指定一个HTMLMediaElement
方法。
// html part
<video id="player" ... />
// js part
const video = document.querySelector('#player')
const play = video.play
video.play() // works!
play() // error!
Uncaught (in promise) TypeError: Failed to execute 'play' on 'HTMLMediaElement': Illegal invocation
有谁知道为什么会发生这个错误?
答案 0 :(得分:4)
HTMLMediaElement.play
的原生DOM实施要求this
绑定到HTMLMediaElement
。
video.play()
有效,因为this
值已绑定到video
。
play()
无法正常工作,因为this
值现已绑定到其他内容(可能是window
?)。
您可以使用以下方式调用它:
const video = document.querySelector('#video');
play = video.play;
play.call(video);
&#13;
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>
&#13;
或&#34;保存以供日后使用&#34;使用bind:
const video = document.querySelector('#video');
play = video.play.bind(video);
play();
&#13;
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>
&#13;