初探vue.use和vue.prototype的区别

首先,明确一点,

  • 不是为了vue写的插件(插件内要处理)不支持Vue.use()加载方式
  • 非vue官方库不支持new Vue()方式
  • 每一个vue组件都是Vue的实例,所以组件内this可以拿到Vue.prototype上添加的属性和方法。

可能网上说的比较概念化,其实主要是插件内源码编写的内容方式不一样,用Vue.use全局注册的插件,必须含有install方法,vue.use()通过bind()置换install()的this为vue实例环境;

我们来看Vue.use方法内部是怎么实现的

Vue.use = function (plugin) {
  if (plugin.installed) {
    return;
  }
  // additional parameters
  var args = toArray(arguments, 1);
  args.unshift(this);
  if (typeof plugin.install === 'function') {
    plugin.install.apply(plugin, args);
  } else {
    plugin.apply(null, args);
  }
  plugin.installed = true;
  return this;
};

其实也就是调用了这个install方法而已。

关键在于这一句args.unshift(this)传入了Vue实例对象,,args.unshift(this),等同于[].unshift(Vue),即args = [Vue];

install方法传入的参数为args内数组元素,即install接受的第一个参数为Vue.

那假如有些插件不规范又或者不是按照vue规则设计(准确地说不是专门为VUE服务);里面没有install方法,那么就通过添加到vue原型链上的方式使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值