分析一下Vue.use的源码

分析一下Vue.use的源码

有过vue开发经验的,对于vue.use并不陌生。当使用vue-resource或vue-router等全局组件时,必须通过Vue.use方法引入,才起作用。那么vue.use在组件引入之前到底做了那些事情呢?

先上vue.use源码

Vue.use = function (plugin) {    /* istanbul ignore if */    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 if (typeof plugin === 'function') {      plugin.apply(null, args);    }    plugin.installed = true;    return this  };

登录后复制

假设我们通过Vue.use引入一个插件plugin(该插件可以暂时理解为一个变量或参数),即Vue.use(plugin);

首先判断传入的参数plugin的属性installed是否存在,如果存在且逻辑值为真,那么直接返回,后边的代码就不会在执行,这个判断的作用是什么呢?后边会讲到。

立即学习“前端免费学习笔记(深入)”;

我们先假设plugin的属性installed不存在或为假,那么继续往下执行

var args = toArray(arguments, 1)

登录后复制

执行了一个toArray方法,toArray接收了两个参数,arguments为Vue.use方法传入的参数集合,例如Vue.use(a,b,c),那么arguments类似于[a,b,c](说明:arguments只是类数组,并不是真正的数组)此处因为我们只引入一个参数plugin,所以arguments类似于[plugin]。

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}

登录后复制

当执行toArray(arguments,1),会生成一个新数组ret,长度 = arguments.length-1,然后进行while循环,依次倒序把arguments的元素赋值给ret,因为ret比arguments长度少1.

所以最终等同于arguments把除了第一个元素外的其余元素赋值给ret。toArray主要作用就是把类数组转化为真正的数组,这样才能调用数组的方法。

因为此处我只引入一个plugin参数,即arguments=[plugin],所以toArray返回为空数组[]。

接着往下执行,args.unshift(this),等同于[].unshift(Vue),即args = [Vue];

然后执行

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

登录后复制

此处判断plugin的install是否为函数,如果为函数,立即执行pluign.install方法,install方法传入的参数为args内数组元素,即install接受的第一个参数为Vue.

如果plugin的install不是函数,那么判断plugin本身是否为函数,如果为函数,那么执行plugin函数,且参数为args内数组元素。

最后设置plugin.installed为true。设置plugin.installed为true的作用是避免同一个插件多次执行安装,比如Vue.use(plugin)执行一次之后,installed为true,再次执行的话走到第一步判断就返回了。

综上所述,Vue.use的作用其实就是执行一个plugin函数或者执行pluign的install方法进行插件注册,并且向plugin或其install方法传入Vue对象作为第一个参数,use的其他参数作为plugin或install的其他参数。

举个简单的例子

import Vue from 'vue'function test(a){   console.log(a);//Vue}function test1(a,b){  console.log(a,b);//Vue hello}let oTest = {   install:function(a,b){      console.log(a,b);//Vue hello1   }}Vue.use(test);Vue.use(test1,'hello');Vue.use(oTest,'hello1')console.log(oTest);//{  install:function(){...},  installed:true}

登录后复制

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

以上就是分析一下Vue.use的源码的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3023047.html

(0)
上一篇 2025年3月13日 06:02:14
下一篇 2025年2月28日 03:11:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue.js中如何使用v-for以及怎么获取索引?

    下面vue.js教程栏目带大家了解一下vue.js中v-for的使用及索引获取。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 登录后复制   变化如下: el处需id,写body报错;参数index需写在item后面;作…

    2025年3月13日
    200
  • 了解vue.js中的常用指令(总结)

    v-text v-text主要用来更新textContent,可以等同于JS的text属性。 // 等同于下方语句: {{text}} 登录后复制 v-html 双大括号的方式会将数据解释为纯文本,而非HTML。为了输出真正的HTML,可以…

    2025年3月13日
    200
  • vue.js图片怎么渲染

    vue.js渲染图片的方法:首先初始化列表;然后获取上个页面带过来的参数,获取api,app,foot;接着向后传递参数;最后渲染本地图片。 【相关文章推荐:vue.js】 vue.js渲染图片的方法: 带参数传值 本地美食 立即学习“前端…

    2025年3月13日
    200
  • vue.js打包后图片路径错误怎么办

    vue.js打包后图片路径错误的解决办法:1、修改【assetsPublicPath: ‘./’】;2、打开【webpack.prod.conf.js】,在output增加【publicPath: ‘./…

    2025年3月13日 编程技术
    200
  • vue项目能直接引入vue.js吗

    vue项目能直接引入vue.js,引入方法:1、是使用脚手架工具【vue-cli】;2、二是直接在项目引入【vue.js】,代码为【var vm = new Vue({el: ‘#accountManage’,dat…

    2025年3月13日
    200
  • vue.js是什么软件

    vue.js是什么软件是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用,Vue的核心库只关注视图层,方便与第三方库或既有项目整合。 【相关文章推荐:vue.js】 Vue是一…

    2025年3月13日
    200
  • 微信小程序能不能用vue.js

    微信小程序能用vue.js,mpvue是一款使用【Vue.js】开发微信小程序的前端框架,使用此框架,开发者将得到完整的【Vue.js】开发体验,同时为H5和小程序提供了代码复用的能力。 【相关文章推荐:vue.js】 微信小程序能用vue…

    2025年3月13日
    200
  • vue.js中如何让文字居中

    vue.js中让文字居中的方法:首先把css部分拿下来封装成一个Vue组件,并实例化;然后给组件绑定动态的数据;最后接收数据并把数据绑定到内容中。 【相关文章推荐:vue.js】 vue.js中让文字居中的方法: 首先我们先把css部分拿下…

    2025年3月13日
    200
  • vue.js中的插槽是什么

    vue.js中的插槽是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。 【相关文章推荐:vue.js】 什么是插槽? 插槽(Slot)是Vue提出来的一…

    2025年3月13日
    200
  • vue.js怎么让网页定时刷新

    vue.js让网页定时刷新的方法:1、执行函数【setTimeout(function(){}, milliseconds)】;2、在执行定时器前先执行一次获取接口数据的操作函数。 【相关文章推荐:vue.js】 vue.js让网页定时刷新…

    2025年3月13日
    200

发表回复

登录后才能评论