Vue.use可以实现插件的注册
官方用法解释
安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。
该方法需要在调用 new Vue() 之前被调用。
当 install 方法被同一个插件多次调用,插件将只会被安装一次。
这个方法主要把Vue引用通过install(Vue)方法暴露出去,
当调用Vue.use(Plugin)时,会执行Plugin.install(Vue)
这样实现isntall方法的Plugin就可以对Vue进行任何操作,
以达到对Vue扩展的目的,Vue的构造函数以参数的形式被传入install(Vue)方法中了,所以插件可以对Vue的构造函数做任何合法的扩展
export function initUse (Vue: GlobalAPI) {
Vue.use = function (plugin: Function | Object) {
// 如果没有_installedPlugins属性,创建一个空数组
const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
// 如果插件已存在,直接返回
if (installedPlugins.indexOf(plugin) > -1) {
return this
}
// additional parameters
// 将参数(类数组对象)从第二个参数开始转化为数组
const args = toArray(arguments, 1)
// 第一个参数就是this 即Vue
args.unshift(this)
// 如果plugin.install是个函数,就调用 isntall(args)
if (typeof plugin.install === 'function') {
plugin.install.apply(plugin, args)
// 如果plugin直接是个函数,那就直接调用
} else if (typeof plugin === 'function') {
plugin.apply(null, args)
}
installedPlugins.push(plugin)
return this
}
}