Vue.use()的实现

Vue.use(插件名)用于引入插件
在这里插入图片描述
打个断点看看它的实现

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

      // additional parameters
      var args = toArray(arguments, 1);
      args.unshift(this);
      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这个构造函数中寻找installedPlugins,若找不到,则
初始化为一个数组

在这里插入图片描述
然后在这个数组中判断是否有传进来的plugin这个插件,如果有则直接返回,如果没有则继续执行

在这里插入图片描述
然后到这一步,用toArray方法将arguments类数组转化为数组并剔除它的第一项(就是去除plugin这个参数,因为调用plugin.install的时候不需要这个参数),然后通过unshift()在数组首部添加this,也就是Vue对象。

接着我们进入toArray函数看看

function toArray (list, start) {
    start = start || 0;
    var i = list.length - start;
    var ret = new Array(i);
    while (i--) {
      ret[i] = list[i + start];
    }
    return ret
  }

这里返回的ret就是arguments从它下标1开始的数组

 if (typeof plugin.install === 'function') {
        plugin.install.apply(plugin, args);
      } else if (typeof plugin === 'function') {
        plugin.apply(null, args);
      }
      installedPlugins.push(plugin);
      return this

接着对plugin是一个函数还是对象进行判断
如果我们传入的插件是对象,那就调用插件的install方法并通过apply()方法将install方法改变this的指向为plugin。
若传入的插件是函数,则apply改变this指向为null即可
在这里插入图片描述
最后把插件push到installedPlugins中,表示插件已成功注册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值