Vue.use 与 Vue.prototype 在注册插件时,使用上有什么区别

news2024/11/27 22:25:40

很多使用Vue开发的童鞋,可能对Vue的原型对象prototype有了解过,但对于Vue.use只知如何使用,却不知其背后的含义。那么,今天我们就来瞧一瞧Vue.use()背后的逻辑。

🎈 首先,Vue.use()是什么?

官方对 Vue.use() 方法的说明:通过全局方法 Vue.use() 使用插件,Vue.use 会自动阻止多次注册相同插件,它需要在你调用 new Vue() 启动应用之前完成,Vue.use() 方法至少传入一个参数,该参数类型必须是 Object 或 Function。

如果是 Object,那么这个 Object 需要定义一个 install 方法;如果是 Function,那么这个函数就被当做 install 方法。在 Vue.use() 执行时 install 会默认执行,当 install 执行时第一个参数就是Vue,其他参数是 Vue.use() 执行时传入的其他参数。就是说使用它之后调用的是该组件的install 方法

当 install 方法被同一个插件多次调用,插件将只会被安装一次。也就是说Vue.use 会自动阻止多次注册相同插件

👉 示例

// 引入公共方法扩展
import common from '@/prototypeEx/common.js'
Vue.prototype.common = common
// 引入公共缓存方法
import cacheEx from '@/prototypeEx/cacheEx.js'
Vue.prototype.cacheEx = cacheEx
// 引入大数据展示 插件
const echarts = require('echarts')
Vue.prototype.$echarts = echarts
 
import uploader from 'vue-simple-uploader'
Vue.use(uploader)
// 引入自己封装的全局注册的公共组件
import ztable from '@/components/index.js'
Vue.use(ztable)

🎈 Vue.use 与 Vue.prototype 的区别

Vue.use和Vue.prototype没有本质区别,Vue.use就是在Vue.prototype基础上又封装了一层而已,他们实现的原理都是在Vue.prototype上添加了一个方法,Vue.prototype适合于注册Vue生态外的插件,也就是说不是为了Vue编写的插件,用Vue.prototype导入。Vue.use适合于注册Vue生态内的插件,也就是说针对Vue编写的插件用Vue.use导入。Vue.use和Vue.prototype最终的用途是一样的——都是为了能在全局引用。

👉 分析过程

$echarts变量前加上$,是一种规范,是为了防止被组件中的变量意外覆盖,即防止命名冲突。

😀 vue.prototype:实例上挂载属性/方法

在多个地方都需要使用但不想污染全局作用域的情况下,这样定义,在每个 Vue 实例中都可用。$ 表示这是一个在 Vue 所有实例中都可用的属性,常用于方法、变量

每一个vue组件都是Vue的实例,所以组件内this可以拿到Vue.prototype上添加的属性和方法。

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方法内容, 我们居然看到了Vue.prototype.$toast = toast;,
// 准备好 install 方法 给 Vue.use() 使用
const install = function (Vue) {
if (install.installed) return;
install.installed = true;
 
// 将包装好的 toast 挂到Vue的原型上,作为 Vue 实例上的方法
Vue.prototype.$toast = toast;
}
 

🎈 总结

看了源码才知道原来`Vue.use`主要是执行`install`方法,而`install`主要也是执行`Vue.prototype`方法。所以,其实`Vue.use()`方法的核心就是`Vue.prototype`,只不过又封装了一层,更加的灵活,扩展性更好。

把vue理解成一棵树,`Vue.use`和`Vue.prototype`都是在这颗树上挂载插件的方式,不同之处是使用`vue.prototype`,插件不需要实现`install`方法,简单粗暴,拿来就用,但是灵活性不如`Vue.use()`, 而`Vue.use()`,却要求插件必须实现`instal`方法(也就是说必须具有install方法的插件才能使用Vue.use(参数)注册,传入参数的插件是一个object,反之,使用Vue.use(参数)注册的插件,如果参数是对象,必须具有install方法)或者该插件本身就是函数(那么这个函数就被当做 install 方法,在`install`方法可以完成自己的逻辑, 所以`Vue.use()`的方式更加的强大,灵活,扩展性更好。

但是两者并没有高低之分, 只是有着各自的应用场景,`Vue.prototype`适合于非Vue生态的插件,而`Vue.use()`适合于Vue生态内的插件,一个简单实用,一个灵活扩展性好。而且,`Vue.use`的实现依赖于`Vue.prototype`,最本质的理解就是`Vue.use`包裹着`Vue.prototype`又进一步的封装了一次。

参考:Vue.use()的用法详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外汇天眼:投资200美元起 每天收益7%!千万别被蒙蔽双眼!

12月14日,英国金融行为监管局( FCA )首次对 GoldVest FX 发出警告,提示投资者警惕与这家未经授权的公司打交道。 FCA警告称:GoldVest FX 在未经我们授权的情况下在英国提供金融服务或产品,如果一旦遭受资金损失,您将无…

logback-spring.xml 配置化说明记录如何在SpringBoot项目里面配置logback-spring.xml教程说明

目录 前言描述 logback-spring.xml 配置项详细 配置位置路径 前言描述 无论什么样的java应用都需要日志分级, 日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。 DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。1.static L…

【三维目标检测】FCAF3D(二)

FCAF3D数据和源码配置调试过程请参考上一篇博文:【三维目标检测】FCAF3D(一)_Coding的叶子的博客-CSDN博客。本文主要详细介绍FCAF3D网络结构及其运行中间状态。 1 模型总体过程 FCAF3D模型的整体结构如下图所示。该模型属于anchor-free目标…

SIoU Loss 原理与代码解析

paper:SIoU Loss: More Powerful Learning for Bounding Box Regression code:https://github.com/meituan/YOLOv6/blob/main/yolov6/utils/figure_iou.py#L75 存在的问题 之前的目标检测模型的回归损失考虑到了预测的bounding box和gt box之间的dis…

【头歌C语言程序与设计】选择结构程序设计进阶

目录 写在前面 正文 第1关:快递费用计算 第2关:计算一元二次方程的根 第3关:产品信息格式化 写在最后 写在前面 本文代码是我自己所作,本人水平有限,可能部分代码看着不够简练,运行效率不高,但都能运…

cmake笔记 编译与链接

文章目录概述编译最简单的hello world编译工程化的helloWorld更工程化的Hello World: 构建静态库与动态库如何使用外部共享库和头文件其他有用的cmake命令include_directoriesfind_package file(GLOB variable [RELATIVE path] [globbing expressions]...)windows 下…

【Maven基础】IDEA环境使用

第一节 创建父工程 1、创建 Project 2、开启自动导入 创建 Project 后,IDEA 会自动弹出下面提示,我们选择**『Enable Auto-Import』**,意思是启用自动导入。 这个自动导入一定要开启,因为 Project、Module 新创建或 pom.xml 每次…

微服务的相关概念及知识

微服务概念 微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HT…

6-zookeeper-hadoop-ha原理简述-fail

6-zookeeper-hadoop-ha故障转移机制,原理简述: HA概述(2.X版本架构)。 1)、HA(High available),即高可用(7*24小时不间断服务。) 1、zookeeper协调服务,通…

jsp+ssm计算机毕业设计毕业设计管理系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

Qt扫盲-QScrollBar理论总结

QScrollBar理论总结1. 简述2. 滚动条组成3. 常用设置5. 信号6. 键盘功能1. 简述 QScrollBar其实就是一个滚动条控件,它使用户能够访问大于用于显示文档的小组件的文档部分。它提供了用户在文档中的当前位置以及可见的文档量的可视指示。滚动条通常配备其他控件&…

什么是MOS管的米勒效应

在说MOS管的米勒效应之前我们先看下示波器测量的这个波形: 这个波形其实就是这个MOS管开关电路的波形,探头1这个黄色的测量的是MOS管的栅极,探头2这个蓝色的测量的是MOS管漏极 大家有没有发现这个黄色的波形在上升的过程中出现了一个平台,其实…

一年半经验如何准备前端面试

typeof NaN 的结果是什么? NaN 指“不是一个数字”(not a number),NaN 是一个“警戒值”(sentinel value,有特殊用途的常规值),用于指出数字类型中的错误情况,即“执行数…

如何快速拥有好的测试idea

如果接手任意一个测试任务,如何开始测试以及怎么快速的形成测试点呢?其实也是有一套小套路的。大概整理了下,可以从6个方面来考虑入手。 1.项目 快速了解项目背景、信息对象、项目风险、测试资料、债务、交流、语境分析、交付品、工具。 项目的提出动机…

0~9岁|一文讲清楚精细动作有多重要

人都有两宝:“双手和大脑”。 在我们的脑中枢神经内,有一部分专门掌管手部动作,手部动作越精细,与之对应的大脑神经元也就越发达。作为儿童智能的重要组成部分,精细动作还是衡量儿童神经系统发育的一个重要指标。 一、…

C++:继承、模板、CRTP:谈谈C++多态设计模式(三):函数模板

1:模板的概念 C中不止有 面向对象编程思想,还要泛型编程思想。而泛型编程思想的核心就是 模板 模板的建立大大提搞了复用行,C中的模板包括 :函数模板和类模板。 2:函数模板基本语法 函数模板 概念: 建立…

细粒度图像分类论文研读-2018

文章目录Object-Part Attention Model for Fine-grained Image Classification(by localization- classification subnetwork)AbstractIntroductionObject- Part Attention ModelObject- Part Spatial Constraint ModelOur OPAM ApproachObject-level At…

Flink从入门到放弃—Stream API—clean()方法

文章目录导航clean()案例贴上源码导航 涉及到文章: Flink从入门到放弃—Stream API—Join实现(即多流操作) Flink从入门到放弃—Stream API—常用算子(map和flatMap) Flink从入门到放弃—Stream API—常用算子(filter…

讲解Redis的主从复制

Redis 主从复制1 主从复制2 作用3 主从复制架构图4 搭建主从复制5 使用规则1 主从复制 主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据 无法解决: 1.master节点出现故障的自动故障转移 主从复制,是指将一台Redis服务器的数据,复制到…

数据挖掘的步骤有哪些?

所谓数据挖掘就是从海量的数据中,找到隐藏在数据里有价值的信息。因为这个数据是隐式的,因此想要挖掘出来并不简单。那么,如何进行数据挖掘呢?数据挖掘的步骤有哪些呢?一般来讲,数据挖掘需要经历数据收集、…