前言
调用 initUse(Vue)
源码位置 src/core/global-api/use.js
export function initUse (Vue: GlobalAPI) {
Vue.use = function (plugin: Function | Object) {
const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
// 判断是否已经安装,没有则安装,有则返回this(只能安装一次)
if (installedPlugins.indexOf(plugin) > -1) {
return this
}
// additional parameters
const args = toArray(arguments, 1) //toArray将类数组变成真正的数组 ,第二个参数是从索引1开始( 0是插件本身 例:Vue.use(插件,参数) )
args.unshift(this) //这里的this是Vue,这样的话每个插件都会有Vue实例
if (typeof plugin.install === 'function') {
plugin.install.apply(plugin, args)
} else if (typeof plugin === 'function') {
plugin.apply(null, args)
}
installedPlugins.push(plugin) //添加到以注册组件数组中
return this
}
}
总结
Vue.use()是通过initUse
进行初始化的
Vue.use接收一个参数,检测当前实例上是否已经安装了次插件
通过toArray方法处理类数组并返回真正的数组
向该数组最前面添加一个当前实例
判断当前插件是否存在install
方法,存在就调用,不存在调用函数本身
将注册后的插件添加到installedPlugins
数组,避免重复添加