vue原理分析(十四)研究new Vue()中的 initProvide

server/2024/9/25 19:22:37/

在Vue.prototype._init 中有一些init函数,今天我们来研究这些init函数

Vue.prototype._init = function (options) {......{initProxy(vm);}......initLifecycle(vm);initEvents(vm);initRender(vm);callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);initInjections(vm); // resolve injections before data/propsinitState(vm);initProvide(vm); // resolve provide after data/propscallHook$1(vm, 'created');......
}


上一篇中已经研究了 initState ,今天我们往下研究

initProvide(vm);
function initProvide(vm) {const provideOption = vm.$options.provide;if (provideOption) {// 获取provided的对象const provided = isFunction(provideOption)? provideOption.call(vm): provideOption;// 如过不是object对象且为null直接返回if (!isObject(provided)) {return;}// 解析provideconst source = resolveProvided(vm);// IE9 doesn't support Object.getOwnPropertyDescriptors so we have to// iterate the keys ourselves.// IE9不支持Object.getOwnPropertyDescriptors所以这里必须自己去迭代keysconst keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);for (let i = 0; i < keys.length; i++) {const key = keys[i];Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));}}
}
function resolveProvided(vm) {// by default an instance inherits its parent's provides object// but when it needs to provide values of its own, it creates its// own provides object using parent provides object as prototype.// this way in `inject` we can simply look up injections from direct// parent and let the prototype chain do the work.// 默认情况下,实例继承其父级的provides对象,// 但当它需要提供自己的值时,// 它会使用父级provides对象作为原型创建自己的provide对象。// 通过这种方式,在“inject”中,我们可以简单地从直接父级查找注入,并让原型链来完成工作。// existing 是 实例上的 _providedconst existing = vm._provided;const parentProvides = vm.$parent && vm.$parent._provided;// 如果父级上的_provided和实例上的_provided一致,就将父级上的parentProvides赋给实例上的_provided// 否则直接返回实例上的属性if (parentProvides === existing) {return (vm._provided = Object.create(parentProvides));}else {return existing;}
}


http://www.ppmy.cn/server/116912.html

相关文章

时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测

时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测 目录 时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测&#xff…

[OpenGL]使用OpenGL绘制三角形

一、简介 本文介绍了如何在linux/win(wsl2)环境下&#xff0c;使用GLFWGLAD实现绘制三角形。 本文内容基本根据LearnOpengGL-入门-你好&#xff0c;三角形整理完成&#xff0c;读者也可以参考LearnOpengGL-入门-你好&#xff0c;三角形自行学习如何使用OpenGL绘制三角形。 按…

表格多列情况下,loading不显示问题

问题描述&#xff1a; 用element plus 做得表格&#xff0c;如下图&#xff0c;列数较多&#xff0c;且部分表格内容显示比较复杂&#xff0c;数据量中等的情况下&#xff0c;有一个switch 按钮&#xff0c;切换部分列的显示和隐藏&#xff0c;会发现&#xff0c;切换为显示的时…

网络安全-intigriti-0422-XSS-Challenge Write-up

目录 一、环境 二、解题 2.1看源码 一、环境 Intigriti April Challenge 二、解题 要求&#xff1a;弹出域名就算成功 2.1看源码 我们看到marge方法&#xff0c;肯定是原型链污染题目 接的是传参&#xff0c;我们可控的点在于qs.config和qs.settings&#xff0c;这两个可…

3.3k star开源的Notepad++文本编辑器替代品,跨平台

1 简介 notepad作者在软件readme中有不当言论&#xff0c;之前公司就让强制卸载掉了&#xff0c;对于习惯了实用notepad的属实不方便&#xff0c;前段时间有一篇推荐notepad next的&#xff0c;使用起来也不错&#xff0c;今天推荐一款新的替代品&#xff0c;notepad–。 采用…

已配置好的Linux CentOS7虚拟机转换为可视化界面问题

一、发现问题 学习过程中发现可视化界面比较有意思&#xff0c;就想尝试搞一下看看&#xff0c;于是去网站上搜索&#xff0c;看到的一些是在新建虚拟机的时候进行设置的&#xff0c;我尝试跟着步骤去搞&#xff0c;发现其中最关键的一步&#xff0c;软件选择中&#xff0c;没有…

Request Response

1 前言 1.1 内容概要 理解Request、Response和HTTP报文之间的关系掌握通过Request能够获得的信息 请求URL、URI、请求协议请求头、客户机和主机请求参数 掌握通过Response能够完成的设置 响应中文乱码问题响应&#xff08;Json&#xff09;字符串、图片&#xff08;文件&a…

应用层简单实现udp / tcp网络通信

一、常见网络接口总结 1、创建 socket 文件描述符 (TCP/UDP, 客户端 服务器) int socket(int domain, int type, int protocol); domain&#xff1a;AF_INET&#xff1a;网络通信&#xff0c;AF_LOCAL&#xff1a;本地通信 type&#xff1a;UDP&#xff1a;SOCK_DGRAM&…