vue插件开发之-vue.use()的源码分析。

本文深入探讨了Vue框架的插件机制,详细解释了vue.use()方法如何工作,以及它是如何利用备忘录设计模式来优化插件的重复加载问题。以vue-router为例,展示了插件初始化的具体过程。

vue是一个渐进式框架,它本身的核心是解决视图渲染的问题,其它的能力就通过插件的方式来解决。今天我们来看下vue是如何支持框架的。也就是vue.use这部分的实现。

下面我们以vue-router为例来进行说明,

import VueRouter from  'vue-router'
Vue.use(VueRouter)

这段代码大家用过vue-router插件的应该很熟悉了。vue-router就是vue的一个插件了。然后我们首先来看下vue.use的源码实现。

首先,我们看下vue.use()的入参要求。1,含有install方法的一个对象,2,一个function。我们一般都使用1,也就是含有install方法的这个。vue-router也是符合第一种定义的。

那么对应的代码就是

我们可以看到,他会拿到arguments也就是我们所有参数组成的类数组。然后调用toArray,toArray,这个方法用来把类数组转换为数组,接收两个参数,第一个类数组,第二个start

他的作用就是把从start位置到最后的所有元素组成一个数组返回。对我们这里就是再使用vue.use初始化插件时候传入的参数。

接下来拿到返回的数组args调用args.unshift(this).即把vue作为该数组的第一个元素插入到args。

最后调用plugin.install.apply(plugin, args);也就是拿到插件的install方法,以改组件的定义为this。args为参数进行调用。这样就完成了初始化。

最后重点看下刚开始的两行代码

var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

这里用到了备忘录的设计模式,中心思想是如果你已经注册过了。那么我就给你存储起来。下次你再次使用时候就不需要再次做初始化等操作了,可以直接拿到实例。对于性能是很好的优化。那么我们接下里分析下代码

首先vue维护了一个_installedPlugins一个数组,每一次进来时候都会通过installedPlugins.indexOf(plugin)判断这个插件是否已经在这个数组里边了,也就是注册过了。如果已经注册过了直接返回。如果没有注册那么执行接下来的代码,最后代码结束时候把当前pluginpush到installedPlugins中。




转载于:https://www.cnblogs.com/hjdjs/p/10228293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值