Vue.use的功能分析:Vue.use是用来加载插件用的,第一个参数是插件,第二个参数和往后参数都是是插件的自定义配置对象。加载插件,就是去执行plugin或者plugin身上的install方法。
Vue.use的实现:
Vue.myUse = function(plugin) {
// 防止重复加载
const _installedPlugins = this._installedPlugins || (this._installedPlugins = [])
const index = _installedPlugins.indexOf(plugin)
if(index !== -1) {
return this // 加载过的直接return
}
// 用于获取配置参数,从下标为1的开始截取成数组
const args = Array.prototype.slice.call(arguments, 1)
// 把当前的this传进去,因为plugin和plugin.install的第一个默认参数是Vue,第二个往后是默认参数
args.unshift(this)
if(typeof plugin.install === 'function') { // 判断plugin.install是否为函数,是就执行
// 把this指向改好。它是plugin下的install方法
plugin.install.call(plugin, args)
} else if(typeof plugin === 'function') { // 判断plugin是否为函数,是就执行
// 由于plugin就是一个方法,不用指定this。
plugin.call(null, args)
}
_installedPlugins.push(plugin)
return this
}
_installedPlugins: 用于记录已经安装过的插件,防止重复加载。
args: 用于存储传递给plugin或者plugin.install的参数。