Vue引入做了什么

Vue.js 是一个功能强大且易于使用的 JavaScript 框架,今天的任务就是分析在 Vue 引入的过程中,都做了哪些处理 !

流程讲解

首先会调用这几个方法,主要作用是在 Vue 原型上挂载了一系列的方法,让 Vue 实例具备一些核心功能。让我们逐个解释:

// src\core\instance\index.jsinitMixin(Vue); // _init
stateMixin(Vue); // $data, $props, $set, $delete, $watch
eventsMixin(Vue); // $on, $once, $off, $emit
lifecycleMixin(Vue);  // _update, $forceUpdate, $destroy
renderMixin(Vue); // $nextTick, _render

initMixin

这个函数主要负责初始化 Vue 实例的初始化过程,它会在 Vue 原型上添加 _init 方法,用于初始化 Vue 实例

// src\core\instance\init.jsfunction initMixin (Vue) {// 初始化 Vue实例Vue.prototype._init = function (options) { ... };
}

stateMixin

主要用于给 Vue 原型上添加一些状态相关的方法,比如 data、props、set、delete、$watch 等

// src\core\instance\state.jsfunction stateMixin (Vue) {// 获取实例的数据Object.defineProperty(Vue.prototype, '$data', dataDef);// 获取实例的 props对象Object.defineProperty(Vue.prototype, '$props', propsDef);// 向响应式对象中添加一个属性Vue.prototype.$set = set;// 删除响应式对象的属性Vue.prototype.$delete = del;// 用于监测数据的变化Vue.prototype.$watch = function (expOrFn, cb, options) { ... };
}

eventsMixin

用于给 Vue 原型上添加事件相关的方法,比如 on、once、off和emit

// src\core\instance\events.jsfunction eventsMixin (Vue) {// 用于监听事件Vue.prototype.$on = function (event, fn) { ... };// 用于添加监听事件, 但事件只触发一次, 触发后即被移除Vue.prototype.$once = function (event, fn) { ... };// 用于移除事件监听器Vue.prototype.$off = function (event, fn) { ... };// 用于触发事件Vue.prototype.$emit = function (event) { ... };
}

lifecycleMixin

主要用于给 Vue 原型上添加生命周期相关的方法,比如 forceUpdate、destroy

// src\core\instance\lifecycle.jsfunction lifecycleMixin (Vue) {// 用于更新视图Vue.prototype._update = function (vnode, hydrating) { ... };// 用于强制更新视图Vue.prototype.$forceUpdate = function () { ... };// 用于销毁实例Vue.prototype.$destroy = function () { ... };
}

renderMixin

主要用于安装运行时辅助函数以及给 Vue 原型上添加渲染相关的方法,比如 $nextTick、_render

// src\core\instance\render.jsfunction renderMixin (Vue) {// 安装运行时辅助函数installRenderHelpers(Vue.prototype);// 用于在 DOM 更新之后执行回调Vue.prototype.$nextTick = function (fn) { ... };// 用于生成虚拟 DOMVue.prototype._render = function () { ... };
}

installRenderHelpers

作用是安装渲染相关的帮助函数到 Vue 原型上,以便在模板编译的过程中使用

// src\core\instance\render-helpers\index.jsfunction installRenderHelpers (target) {target._o = markOnce; // 标记一个节点只渲染一次target._n = toNumber; // 将值转换为数字target._s = toString; // 将值转换为字符串target._l = renderList; // 渲染数组target._t = renderSlot; // 渲染插槽target._q = looseEqual; // 松散相等判断target._i = looseIndexOf; // 在数组中查找元素target._m = renderStatic; // 渲染静态节点target._f = resolveFilter; // 解析过滤器target._k = checkKeyCodes; // 检查按键码target._b = bindObjectProps; // 绑定对象属性target._v = createTextVNode; // 创建文本节点target._e = createEmptyVNode; // 创建空节点target._u = resolveScopedSlots; // 解析作用域插槽target._g = bindObjectListeners; // 绑定对象监听器target._d = bindDynamicKeys; // 处理动态指令的参数绑定target._p = prependModifier; // 增加前置修饰符标记
}

然后会调用 initGlobalAPI 方法,它初始化了 Vue 的全局 API 并挂载到 Vue 的构造函数上,包括了常见的一些方法和属性

// src\core\index.js// Vue.config, Vue.util, Vue.set, Vue.delete, Vue.nextTick, Vue.observable, Vue.options
// Vue.use, Vue.mixin, Vue.extend
// Vue.component, Vue.directive, Vue.filter
initGlobalAPI(Vue);

initGlobalAPI

在 Vue 实例化之前,初始化 Vue 的全局 API

// src\core\global-api\index.jsfunction initGlobalAPI (Vue) {// 读取当前全局配置Object.defineProperty(Vue, 'config', configDef);// 包含一些工具函数, 如警告函数、对象扩展函数、合并选项函、定义响应式数据Vue.util = {warn: warn,extend: extend,mergeOptions: mergeOptions,defineReactive: defineReactive$$1};Vue.set = set; // 在响应式数据上添加属性Vue.delete = del; // 在响应式数据上删除属性Vue.nextTick = nextTick; // 用于在 DOM 更新之后执行回调函数// 用于将一个普通对象转换为响应式对象Vue.observable = function (obj) {observe(obj);return obj};// 用于存储全局配置, 包括了 components、directives 和 filtersVue.options = Object.create(null);...initUse(Vue); // 用于安装插件initMixin$1(Vue); // 用于全局混入initExtend(Vue); // 用于创建子类initAssetRegisters(Vue); // 用于注册全局指令、过滤器和组件
}

initAssetRegisters

该作用是初始化注册全局资源的方法,包括组件、指令和过滤器

// src\core\global-api\assets.jsvar ASSET_TYPES = ['component', 'directive', 'filter'];function initAssetRegisters (Vue) {// Vue.component, Vue.directive, Vue.filterASSET_TYPES.forEach(function (type) {// 用于注册全局组件, 全局指令, 全局过滤器Vue[type] = function (id,definition) { ... };});
}
总结

这些初始化方法为 Vue 提供了强大的功能扩展和灵活性,使得我们可以轻松配置全局选项、注册全局资源,从而更好地开发 Vue 应用。

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

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

相关文章

C++ 43 之 自增运算符的重载

#include <iostream> #include <string> using namespace std;class MyInt{friend ostream& operator<< (ostream& cout , MyInt& int1); public:MyInt(){this->m_num 0;}// 前置自增&#xff1a; 成员函数实现运算符的重载 返回的是 引用&a…

STM32CubeMX配置-RTC周期唤醒

一、简介 MCU为STM32G070&#xff0c;采用内部时钟32KHZ&#xff0c;配置为周期6s唤醒&#xff0c;调用回调函数&#xff0c;进行喂狗操作。 二、配置 初始时间、日期、周期唤醒时间配置。 开启周期唤醒中断 三、生成代码 调用回调函数&#xff0c;进行喂狗操作。 //RTC唤醒回…

Java NIO ByteBuffer 使用方法

前言 最近在使用spring boot websocket xterm.js 给 k8s pod做了个在线的 web 终端&#xff0c;发现websocket的类核心方法&#xff0c;用的都是ByteBuffer传递数据&#xff0c;如下&#xff1a; OnMessagepublic void onMessage(Session session, ByteBuffer byteBuffer) {…

A48 STM32_HAL库函数 之 SPI通用驱动 -- B -- 所有函数的介绍及使用

A48 STM32_HAL库函数 之 SPI通用驱动 -- B -- 所有函数的介绍及使用 1 该驱动函数预览1.11 HAL_SPI_Transmit_DMA1.12 HAL_SPI_Receive_DMA1.13 HAL_SPI_TransmitReceive_DMA1.14 HAL_SPI_Abort1.15 HAL_SPI_Abort_IT1.16 HAL_SPI_DMAPause1.17 HAL_SPI_DMAResume1.18 HAL_SPI_…

vitepress搭建的博客系统cdn引入github discussions评论系统

github仓库必须是公开的。 按照CDN的方式引入 打开discussions模块 安装giscus app 配置giscus 就是刚安装了giscus app的仓库 页面往下走&#xff0c;生成了代码&#xff1a; 配置vitepress 采用了CDN的方式引入 使用web component 随便找个地方试试组件 效果 有了…

LeetCode43.字符串相乘【大整数相乘】

LeetCode刷题记录 文章目录 &#x1f4dc;题目描述&#x1f4a1;解题思路 &#x1f4dc;题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 Big…

记录一次centos扩容

背景 在Vscode上连虚拟机写项目&#xff0c;突然提示磁盘空间不足(no space left on device)&#xff0c;一开始打算删些东西&#xff0c;这里参考博客&#xff0c;写得挺清楚的&#xff0c;但是操作后我发现实在没啥文件可以删除&#xff0c;所以干脆不删了&#xff0c;直接扩…

创建comfyui自定义节点

参考 https://github.com/liubai-liubai/ComfyUI-ImgSeg-LB/tree/main https://blog.styxhelix.life/?p33 安装 不需要安装任何其他依赖文件&#xff0c;只需要把0x_erthor_node文件夹复制到custom_nodes文件夹下&#xff0c;就能安装成功。 a1&#xff1a;展示了代码结构&…

ensp模拟器USG6000V1配置DCHP功能

接着上一篇配置&#xff0c;继续本篇的内容。开启DHCP功能非常简单&#xff0c;只需几个命令即可。实验拓扑图也非常简单&#xff0c;如下&#xff1a; 开启防火墙DHCP功能&#xff1a; [USG6000V1]dhcp enable 选择DHCP接口并设置接口IP地址&#xff0c;这里给g1/0/0配置2网…

关于lspci命令的相关使用

本实验的目的: 1.知道如何找到想要的PCIE 设备 2.找到设备后,如何得知其厂商ID和设备ID 3.知道如何查看PCIE 设备的LnkCap和LnkSta 4.知道这个PCIE设备究竟挂在那里 一. 查看总体信息 直接使用 lspci 命令,结果如下: 其中第一列形如 "00:00.0" 的含义是 &…

数据库原理(关系型数据库基本理论)——(

一、关系的概念 1.关系的定义 &#xff08;1&#xff09;域 域是一组具有相同数据类型的值的集合&#xff0c;可以理解为int[]&#xff08;int类型的数组&#xff09;是一个域。 &#xff08;2&#xff09;笛卡儿积 简单来说&#xff0c;若干个域的笛卡儿积就是将这几个域的…

RMAN-06023 FRA 和DATA永远不要放在一起

由于FRA 和DATA放在一起&#xff0c;BACKUPSET PDB里面是和datafile放在一起的&#xff0c;再一串数据的目录里&#xff0c;正常会认为这个目录包含的是datafile. ASMCMD> ls DATA1/CDB/0633F844101D69CBE0636401A8C09D55/BACKUPSET/2024_06_15/nnndf0_tag20240615t223219_0…

MySQL日志(三):数据安全

先来看一个结论&#xff1a;只要redo log和binlog保证持久化到磁盘&#xff0c; 就能确保MySQL异常重启后&#xff0c; 数据可以恢复。 binlog写入逻辑 binlog的写入逻辑比较简单&#xff1a; 事务执行过程中&#xff0c; 先把日志写到binlog cache&#xff0c; 事务提交的时候…

腾讯测试开发复试<硬核面经>

隔天捞测试开发-腾讯云&#xff0c;硬核90min 3.27 状态返回初面 2h 自我介绍你的项目实习中sql的基本操作&#xff0c;用到了sql实现什么样的功能&#xff0c;或者场景给你一个场景&#xff0c;比如两个客户端都要去操作同一条数据这时候会发生什么现象&#xff0c;你如何处…

Linux:线程池

Linux&#xff1a;线程池 线程池概念封装线程基本结构构造函数相关接口线程类总代码 封装线程池基本结构构造与析构初始化启动与回收主线程放任务其他线程读取任务终止线程池测试线程池总代码 线程池概念 线程池是一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影…

2024.06.03 校招 实习 内推 面经

1、提前批 | RoboSense 速腾聚创 2025届全球校园招聘提前批启动-免笔试&#xff08;内推&#xff09; 提前批 | RoboSense 速腾聚创 2025届全球校园招聘提前批启动-免笔试&#xff08;内推&#xff09; 2、校招 | 星纵物联2025届校园招聘全面启动&#xff01; 校招 | 星纵物联…

PyTorch -- nn.Module 快速实践

网络层父类 nn.Module&#xff1a;Evrey Layer is nn.Module (nn.Linear, nn,Conv2d …)具体的&#xff0c;我们在定义自已的网络时&#xff1a;需要继承 nn.Module&#xff0c;并重新实现 __init__ 方法: 一般放置网络中具有可学习参数的层&#xff08;如全连接层、卷积层等&a…

STM32CubeMX配置-外部中断配置

一、简介 MCU为STM32G070&#xff0c;配置为上升沿触发外部中断&#xff0c;在上升沿外部中断回调函数中进行相关操作。 二、外部中断配置 查看规格书中管教描述&#xff0c;找到I/O对应的外部中断线&#xff0c;然后进行如下上升沿触发外部中断配置。 三、生成代码 调用上升沿…

【 Python高级编程】Matplotlib中xlabel 和 xticks参数的区别

xlabel 和 xticks 是 Matplotlib 中用于处理 x 轴标签的两个函数&#xff1a; xlabel 设置 x 轴的标签。仅设置标签文本&#xff0c;不影响刻度位置或格式。 xticks 设置 x 轴的刻度位置和标签。接受两个参数&#xff1a;位置和标签。可以用来自定义刻度的位置和格式。 主…

JavaScript 规范霍夫曼编码

霍夫曼编码是一种无损数据压缩算法&#xff0c;其中数据中的每个字符都分配有可变长度的前缀代码。出现频率最低的字符获得最大代码&#xff0c;出现频率最高的字符获得最小代码。使用这种技术对数据进行编码非常简单且高效。但是&#xff0c;解码使用此技术生成的比特流效率低…