vue.use(plugin, arguments) 语法

  • 参数:plugin(Function | Object)
  • 用法:
    如果vue安装的组件类型必须为Function或者是Object<br/>

    如果是个对象,必须提供install方法

    如果是一个函数,会被直接当作install函数执行

    install函数接受参数,默认第一个参数为Vue,其后参数为注册组件时传入的arguments


组件.js
export const testObj = {
install(Vue, arg) { }
}
export const testFn = founction(Vue, arg) { } index.js
import { testObj, testFn } from './组建.js'
Vue.use(testObj, arg)
Vue.use(testFn, arg)

建议组件采用第一种写法,根据use源码,当采用第二种写法时,this指针指向null


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

官方use源码


import { toArray } from '../util/index' export function initUse (Vue: GlobalAPI) {
Vue.use = function (plugin: Function | Object) {
// 限制了自定义组建的类型
const installedPlugins = (this._installedPlugins || (this._installedPlugins =
[]))
//保存注册组件的数组,不存在及创建
if (installedPlugins.indexOf(plugin) &gt; -1) {
//判断该组件是否注册过,存在return Vue对象
return this
}
//调用`toArray`方法
const args = toArray(arguments, 1)
args.unshift(this)
//将Vue对象拼接到数组头部
if (typeof plugin.install === 'function') {
//如果组件是对象,且提供install方法,调用install方法将参数数组传入,改变`this`指针为该组件
plugin.install.apply(plugin, args)
} else if (typeof plugin === 'function') {
//如果传入组件是函数,这直接调用,但是此时的`this`指针只想为`null`
plugin.apply(null, args)
}
//在保存注册组件的数组中添加
installedPlugins.push(plugin)
return this
}
}

toArray方法源码


export function toArray (list: any, start?: number): Array&lt;any&gt; {
start = start || 0
let i = list.length - start
//将存放参数的数组转为数组,并除去第一个参数(该组件)
const ret: Array&lt;any&gt; = new Array(i)
//循环拿出数组
while (i--) {
ret[i] = list[i + start]
}
return ret
}

原文地址:https://segmentfault.com/a/1190000017162947

Vue.use原理及源码解读的更多相关文章

  1. 2,MapReduce原理及源码解读

    MapReduce原理及源码解读 目录 MapReduce原理及源码解读 一.分片 灵魂拷问:为什么要分片? 1.1 对谁分片 1.2 长度是否为0 1.3 是否可以分片 1.4 分片的大小 1.5 ...

  2. 第二十三课:jQuery.event.add的原理以及源码解读

    本课主要来讲解一下jQuery是如何实现它的事件系统的. 我们先来看一个问题: 如果有一个表格有100个tr元素,每个都要绑定mouseover/mouseout事件,改成事件代理的方式,可以节省99 ...

  3. http-proxy-middleware使用方法和实现原理(源码解读)

    本文主要讲http-proxy-middleware用法和实现原理. 一 简介 http-proxy-middleware用于后台将请求转发给其它服务器. 例如:我们当前主机A为http://loca ...

  4. Future、FutureTask实现原理浅析(源码解读)

    前言 最近一直在看JUC下面的一些东西,发现很多东西都是以前用过,但是真是到原理层面自己还是很欠缺. 刚好趁这段时间不太忙,回来了便一点点学习总结. 前言 最近一直在看JUC下面的一些东西,发现很多东 ...

  5. serve-index用法、实现原理(源码解读)

    本文主要讲解serve-index的用法和实现原理(源代码分析). 一 说明 serve-index的功能是将文件夹中文件列表显示到浏览器中. serve-index是一个NodeJS模块,可以通过N ...

  6. Vue 源码解读(12)—— patch

    前言 前面我们说到,当组件更新时,实例化渲染 watcher 时传递的 updateComponent 方法会被执行: const updateComponent = () => { // 执行 ...

  7. HttpClient 4.3连接池参数配置及源码解读

    目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...

  8. HttpClient4.3 连接池参数配置及源码解读

    目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...

  9. Vue 源码解读(3)—— 响应式原理

    前言 上一篇文章 Vue 源码解读(2)-- Vue 初始化过程 详细讲解了 Vue 的初始化过程,明白了 new Vue(options) 都做了什么,其中关于 数据响应式 的实现用一句话简单的带过 ...

随机推荐

  1. linux下kill某个应用

    linux命令行与桌面切换快捷键Ctr+Alt+F1,Ctr+Alt+F7 ps -e | grep abc sudo kill xyz

  2. Java实验--关于英文短语词语接龙

    在课堂上经过实验之后,重新在宿舍里面从0开始编写大概30分钟左右能够完成这个实验,不是原来的思路. 该实验的表述为:从两个文本input1.txt和input2.txt中读取英文单词,若前面的英文单词 ...

  3. P2P技术简介(包括BT软件的分析)(转)

    这是一篇别人发表的论文,里面很全面的解释了P2P技术的实现,以及BT网络中应用P2P技术所设计的原理,并列举BT软件的一些专业名词的定义.由于论文发表的比较早,2005年时还没有DHT技术. (链接: ...

  4. 简单配置PonyDebugger

    OS的Debug 系统在github上还是有不少. PonyDebugger是看上去比较牛气的一个.尝试一下 Logo PonyDebugger 可以监控网络 NetworkTrafficDebugg ...

  5. PopupMenu和对话框的使用

    PopupMenu和对话框的使用 1.菜单的使用之 PopupMenu 步骤:1.创建popupMenu对象 参数:上下文对象   当前view对象 2.利用getMenu().addSubMenu创 ...

  6. VMWare 无损扩展磁盘大小

    1. 所需文件(gparted) 可以去gparted主页下载LiveCD 下载地址:http://sourceforge.net/projects/gparted/files/gparted/ 或百 ...

  7. GO -- socket读取内容

    func handleRead(conn net.Conn, done chan string) { for { buf := make([]) reqLen, err := conn.Read(bu ...

  8. 【Todo】Java学习路线(方向指导)

    在网上搜了下Java学习路线(关键词:学习,因为众所周知,实践出牛人,在平时工作不怎么深入的情况下,才强调学习的方向的重要性 ^_^) 发现下面知乎这个回答写的真好.mark如下: https://w ...

  9. MachineLearningInAction

    2017-01-07 20:14:45 前面两周主要都是在复习然后考试,每天其实过得也挺苦逼的.基本上项目和学习上的是都没有接触了:复习了随机过程和数字信号处理和信号检测和估值:主要都是复习一些理论上 ...

  10. 查看java中的线程个数名称

    查看java中的线程个数名称 package com.stono.thread2; import java.lang.management.ManagementFactory; import java ...