vue.use()插件安装源码
/* @flow */
import { toArray } from '../util/index' ---将参数类数组转为 数组
export function initUse (Vue: GlobalAPI) {
Vue.use = function (plugin: Function | Object) {
const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
if (installedPlugins.indexOf(plugin) > -1) { -----检查是否安装过
return this
}
// additional parameters
const args = toArray(arguments, 1)
args.unshift(this)
if (typeof plugin.install === 'function') { ---------检查 有无 install方法
plugin.install.apply(plugin, args)
} else if (typeof plugin === 'function') {
plugin.apply(null, args)
}
installedPlugins.push(plugin) --------避免插件重复安装
return this
}
}
// vue use
// 1、检查插件是否被注册,如果注册直接返回当前实例
// 2、参数 类数组 转为 数组,并添加vue实例
// 3、判断是否有install方法,有,利用apply改变this指向,调用plugin()
// 反之则指向window调用
// 4、将已注册插件 添加到 _installedPlugins 中
// 5、返回实例