只是一个简单的问题。

我想为变量分配一个 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

有谁知道为什么会发生这个错误?

最佳答案

HTMLMediaElement.play 的原生 DOM 实现需要将 this 绑定(bind)到 HTMLMediaElement
video.play() 有效,因为 this 值绑定(bind)到 videoplay() 不起作用,因为 this 值现在绑定(bind)到其他东西(也许是 window ?)。

您可以使用以下方法调用它:

const video = document.querySelector('#video');
play = video.play;

play.call(video);
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>


或使用绑定(bind)“保存以备后用”:

const video = document.querySelector('#video');
play = video.play.bind(video);

play();
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>

关于javascript - 类型错误 : Failed to execute 'play' on 'HTMLMediaElement' : Illegal invocation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44110000/

10-11 11:10