html5play不是HTML5标准API,而是第三方播放器库暴露的全局方法;需通过typeof判断其类型,若为"function"且无prototype则为普通函数,直接调用如html5play("#myVideo"),不可盲目new。

html5play 不是 HTML5 标准 API,也不是浏览器原生函数——它不存在于任何规范中,调用前无需、也无法“实例化”。你看到的 html5play 很可能是某个第三方播放器库(如 video.js、artplayer 或定制封装)暴露的全局方法或构造函数,具体行为完全取决于该库的实现。
怎么判断 html5play 是函数还是构造函数?
打开浏览器开发者工具,在控制台执行:
typeof html5play
根据返回值判断:
- 若返回
"function":大概率是普通函数,直接调用即可,例如html5play("#myVideo"); - 若返回
"function"且html5play.prototype存在(或html5play.constructor === Function),再结合文档看是否支持new html5play(...); - 若报错
ReferenceError: html5play is not defined:说明脚本未加载,或命名不一致(比如实际是HTML5Play、Html5Play或initPlayer)。
常见误用:把非构造函数当类来 new
很多开发者看到首字母大写的 Html5Play 就下意识 new Html5Play(),结果报错 TypeError: Html5Play is not a constructor。这不是语法问题,而是该函数根本没定义 prototype 或未用 class/function 声明为构造器。
立即学习“前端免费学习笔记(深入)”;
实操建议:
- 查该库的官方文档,确认初始化方式(多数轻量播放器用函数式调用,如
html5play(el, options)); - 检查源码或打包后的 JS,搜索
function html5play或const html5play =,看是否有return new ...或this绑定逻辑; - 如果它内部返回一个对象(如
{ play(), pause(), destroy() }),那它本身不是构造函数,只是工厂函数。
正确调用示例(以典型封装为例)
假设某项目中引入了自定义播放器脚本,暴露了 html5play:
html5play('#video', {
autoplay: true,
controls: true,
poster: '/poster.jpg'
});
注意这里没有 new,参数是 DOM 选择器或元素引用 + 配置对象。如果传入的是 document.getElementById('video'),也无需额外包装成实例。
容易踩的坑:
- 在
元素尚未插入 DOM 时就调用html5play,导致找不到元素; - 重复调用
html5play('#video')而未先销毁旧实例(部分库不自动覆盖,会创建多个播放器叠加); - 混淆
html5play和原生HTMLMediaElement.play()—— 后者必须用户手势触发,且返回 Promise,不能直接new。
真正需要关注的,从来不是“要不要实例化”,而是“这个标识符到底是谁定义的、文档里怎么写的、它返回什么”。别被名字带偏,直接看运行时行为和源码最可靠。










