赞
踩
插件系统是核心模块与应用功能完全分离的系统,开发者可以通过插件扩展丰富项目功能。
核心:最小可运行的集合。
插件:模块相互独立,单一职责。
在实现插件系统之前我们先看下,一个安全可靠、稳定的系统应该遵守哪一些要求。
src/index.js
class Player { // 插件列表 static plugins = { }; constructor(config) { this.element = config.element; this.config = config; this.createDomToHTML(); this.pluginsCall(); this.initVideoPlayer(); } // 在div中创建所需要的元素。 createDomToHTML() { this.root = createDOM({ el: 'div', cname: 'container', }) this.video = createDOM({ el: 'video', cname: 'video-player', attrs: { width: '100%', height: '100%', } }) this.element.appendChild(this.root); this.root.appendChild(this.video); } // 关键:绑定所有的插件。 pluginsCall() { if (Player.plugins) { Object.keys(Player.plugins).forEach((name) => { let descriptor = Player.plugins[name] descriptor.call(this, this); // 将插件中的this指向到Player }) } } // 关键:挂载插件 static install(name, fn) { if (!Player.plugins[name]) { Player.plugins[name] = fn; } } // 生命周期 - 在播放器内容完成前 initVideoPlayer() { this.video.src = this.config.url; } play() { this.video.play().then(() => { console.log('video play'); }); } pause() { this.video.pause() } }
src/play.js
const pluginPlay = function () {
console.log('pluginPlay')
const containerEl = createDOM({
el: 'vp-button',
tpl: `
<button class="play">播放</button>
<button class="pause">暂停</button>
`
});
this.element.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。