Vue.extend源码分析

Vue源码系列(一):Vue源码解读的正确姿势 作为一名开发人员,阅读源码是非常好的学习方式,尤其Vue又是当下很受欢迎的前端框架,随着用的人越来越多,不断推动着源码地完善。在源码中有着各位大佬多年积淀下来的精华,而这些精华就非常值得我们学习。 阅读详情

整体思路比较简单,就直接写在代码里边了

Vue.extend = function (extendOptions: Object): Function {
    extendOptions = extendOptions || {}
    const Super = this // 这里指向function Vue() {}
    const SuperId = Super.cid
    const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {})
    if (cachedCtors[SuperId]) {
      return cachedCtors[SuperId]
    }

    const name = extendOptions.name || Super.options.name
    if (process.env.NODE_ENV !== 'production' && name) {
      validateComponentName(name) // 进行校验名字是否合法
    }

    const Sub = function VueComponent (options) {
      this._init(options)
    }
    Sub.prototype = Object.create(Super.prototype) //原型的继承
    Sub.prototype.constructor = Sub // 此时Sub.prototype.constructor指向的是Super,所以要进行修改
    Sub.cid = cid++
    // 选项合并
    Sub.options = mergeOptions(
      Super.options,
      extendOptions
    )
    Sub['super'] = Super

    // For props and computed properties, we define the proxy getters on
    // the Vue instances at extension time, on the extended prototype. This
    // avoids Object.defineProperty calls for each instance created.
    if (Sub.options.props) {
      initProps(Sub)
    }
    if (Sub.options.computed) {
      initComputed(Sub)
    }

    // allow further extension/mixin/plugin usage
    // 就是一些静态方法的继承
    Sub.extend = Super.extend
    Sub.mixin = Super.mixin
    Sub.use = Super.use

    // create asset registers, so extended classes
    // can have their private assets too.
    ASSET_TYPES.forEach(function (type) {
      Sub[type] = Super[type]
    })
    // enable recursive self-lookup
    if (name) {
      Sub.options.components[name] = Sub
    }

    // keep a reference to the super options at extension time.
    // later at instantiation we can check if Super's options have
    // been updated.
    Sub.superOptions = Super.options
    Sub.extendOptions = extendOptions
    Sub.sealedOptions = extend({}, Sub.options)

    // cache constructor
    cachedCtors[SuperId] = Sub // 进行缓存构造函数
    return Sub // 返回的是一个构造函数
  }
}
华三R4900 G5服务器实战:用PMC P460-B4阵列卡配置RAID1+RAID6,并搞定CentOS 7.9安装(含热备盘设置) 本文详细解析了在华三R4900 G5服务器上使用PMC P460-B4阵列卡配置RAID1+RAID6混合阵列的全过程,包括热备盘设置和CentOS 7.9系统安装。通过实战步骤和性能优化建议,帮助企业IT人员高效部署高可用存储方案,特别适合需要数据冗余和系统稳定性的企业级应用场景。 阅读详情

相关推荐

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

weixin_45355881的博客 4708

vue 源码解析

watch:watcher解析表达式,收集依赖,在依赖(表达式值)改变时触发回调(handler);调用所有watcher的update更新。数据双向绑定:用Object.defineProperty方法重写data中每个数据的get,set方法,在get中执行依赖收集(执行 Dep.depend 方法)和set中派发更新通知(执行 Dep.notify 方法)。computed。

wanglun_的博客 3794

LSF0108 level shift设计使用及debug流程

目录 初版设计 测试出现的问题1 解决问题(尝试1) 测试出现的问题2 解决问题2-1 解决问题2-2 单Port测试结果 所有Port均连接测试结果 初版设计 此电路的应用场景在于将LCD屏幕连接到FPGA上,进而通过FPGA中设计的硬件电路来驱动LCD屏幕,验证数字硬件电路设计的正确性。因此需要一个转接板位于FPGA和LCD屏幕之间,将二者连接起来。 转接板的硬件电路设计主要存在以下需求: 实现3.3V和1.8V之间的同时双向逻辑转换(LCD屏幕电平为3.3V,FPGA电平为1.

moshanghongfeng的博客 7562

Vue源码解析(详细篇)

vue数据观测实现原理,模版编译过程,模版挂载过程分析

weixin_46996561的博客 8300

Ubuntu无桥接模式或连不上网(详细解决方法

目录 问题1:Ubuntu没有未桥接的主机网络适配器 解决方法 1.打开VMware安装目录下的文件 ​编辑2.右键安装以上三个文件 3.打开网络状态属性,找到VMware bridgeProtocol,点击安装 问题2.Ubuntu桥接模式连不上网 1.win+r打开cmd终端,输入ipconfig /all 2.记录以下数据 3.打开VMware网络设置 问题1:Ubuntu没有未桥接的主机网络适配器 VMWare安装之后,虚拟网络一直使用默认配置 VMnet0为...

m0_65592409的博客 6062

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 679

vue源码

这里写目录标题01-vue源码学习-柯里化函数一、概念:二、代码实现三、柯里化函数原理其实是闭包02-vue源码学习-vue的基本执行流程和简单渲染模型03-vue源码学习-响应式原理(对象和数组) 01-vue源码学习-柯里化函数 一、概念: 柯里化: 一个函数原本有多个参数, 之传入一个参数, 生成一个新函数, 由新函数接收剩下的参数来运行得到结构. 偏函数: 一个函数原本有多个参数, 之传入一部分参数, 生成一个新函数, 由新函数接收剩下的参数来运行得到结构. 高阶函数: 一个函数参数是一个函数, 该

qq_41256253的博客 2683

31、双相不锈钢直齿轮加工与性能研究及人工神经网络在焊接中的应用

本文研究了双相不锈钢直齿轮在不同加工方法(WEDM与滚齿加工)下的磨损行为,分析了表面粗糙度、齿厚变化、磨损率及润滑性能随转速的变化规律,并对比了两种工艺的优劣。同时,探讨了人工神经网络(ANN)在AA7050铝合金搅拌摩擦焊中的应用,通过建立工艺参数与焊接质量之间的预测模型,实现了对焊缝硬度和峰值温度的准确预测。研究为高性能齿轮制造和铝合金焊接提供了理论支持和技术参考,并提出了未来在润滑优化、加工工艺改进及智能控制方面的研究方向。

ggg99的专栏 151

Vue源码解析

主要目录结构 scripts:构建相关的脚本和配置文件 dist:构建后的文件 flow:Flow的类型声明 packages:vue-server-render 和 vue-template-compiler,它们作为单独的NPM包发布 test:所有的测试代码 examples:实例代码 types:TypeScript 类型定义 src:源代码 compiler : 与模版编译相关的代码 core : Vue核心库(通用的、与平台无关的运行时代码) observer :实现变化侦测的代码 vdom

weixin_43132396的博客 6841

【OpenClaw从入门到精通】:Web控制台使用全解析——可视化配置与监控(2026实操版)

在OpenClaw的多种管理方式中,Web控制台提供了最直观、最友好的用户体验。通过图形化界面,用户可以轻松完成复杂的配置任务,实时监控系统状态,以及进行各种管理操作。对于不熟悉命令行的用户来说,Web控制台是最佳选择。

一键难忘的博客 1930

【YOLOv8系列】YOLOv8的webUI界面设计;通过Streamlit实现YOLOv8的可视化交互界面设计

但是我为了避免重复性的工作,且为了避免重复安装之前(安装pytorch和yolov8时)已经安装好的库,因此写了一个python脚本进行安装;需要提前在有网络连接的电脑上下载所有必要的依赖项,然后将这些文件传输到离线的机器上进行安装。脚本将自动跳过已安装的包,并安装其余的 .whl 文件。在离线的机器上,切换到包含下载好的文件的目录。证明我们的streamlit安装成功了。证明你的streamlit安装成功了。第一步:在有网络连接的电脑上下载。第二步:将下载的文件传输到离线机器。文件)传输到离线的机器上。

AnChenliang_1002的博客 1567

[Vue源码分析]Vue.extend与Vue.component的区别

版本:Vue.js v2.6.11 Vue.extend与Vue.component的区别,网上搜了很多资料说的都挺好,但是心里似乎总有那么点恍惚,于是找来Vue的源码,一探它底层的实现原理。 直入主题,Vue.extend代码如下 /** * Class inheritance */ Vue.extend = function (extendOptions) { extendOptions = extendOptions || {}; var S

小问's blog 651

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

Vue全局API(Vue.extend)源码分析

Vue.extend官方源码: Vue.extend = function (extendOptions) { extendOptions = extendOptions || {}; var Super = this; var SuperId = Super.cid; var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); if (cachedCtors[Super

weixin_43916777的博客 269

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从源码来认知 Vue.util.extend 与 Vue.extend 的区别

关于这个问题,我百度了一下,貌似很少有人去探究这个问题,既然查不到,那么我们就从源码来学习,这就是一个比较好的方法。源码能够给你答案!

超逸の学习技术博客 1914

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

源码分析(含代码注释) Vue.extend

extend 官方的定义是:使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。 话不多说,上源码: export function initExtend (Vue: GlobalAPI) { /** * Each instance constructor, including Vue, has a unique * cid. This enables us to create wrapped "child * constructors" for prototyp

m0_52544128的博客 417

Vue进阶 =>源码分析$emit 和 $on,directive,Vue.component ,Vue.extend,Vue.use

1.$emit 和 $on 其实就是事件绑定和数据绑定 下面的例子:我们可以打开断点调试一步步的看下去就懂了 <html> <head> <title>$emit 和 $on</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div

Write less,do more 466

【实战】Vue Element+Node.js开发企业通用管理后台系统——Vue进阶(上)

文章目录一、$emit 和 $on1.$on2.$emit二、directive 用法三、Vue.component 用法源码分析四、Vue.extend 用法五、Vue.extend 进阶用法六、Vue.use 用法 http://www.youbaobao.xyz/admin-docs/guide/base/vue.html 一、$emit 和 $on $emit 和 $on主要负责事...

程序边界 2661

【Vue源码探究】Vue.extend和VueComponent的关系

写_Vue.js_已经3年了吧,对_Vue.extend_全局方法的了解也就一直停留在了解,也一直抱着不用就不学的思想,造成了一次又一次的错过~~~直到最近,才通过公司10年秃头少年的代码,才知道错过_Vue.extend_方法,也就等于错过了对_Vue_组件第二春了解的机会!!!整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

小陈的博客 355

Vue:extends继承&组件复用性

Vue:extends继承&组件复用性,首先回顾了Vue.js中创建组件实例的几种方式,进而讨论了如何提升单个组件复用性的几种可行方案,最后介绍了Vue的extends选项——如何通过继承提升组件复用性,并介绍了此种方法的不足之处。

席木木的博客 8868

VUE.extend深度剖析

本文介绍了Vue.extend的基本概念和使用方法。Vue.extend是Vue的基础构造器,用于创建组件"子类",其参数是一个包含组件选项的对象。文章通过示例展示了如何定义Profile组件并挂载到DOM元素上,重点说明了data选项必须为函数形式。此外,还分析了Vue.extend在组件创建中的作用,包括手动挂载组件和渲染字符串模板(需引入编译时)。最后简要提及了源码实现原理,即通过继承父类属性和方法来创建可挂载的子类。所有组件创建时都会调用Vue.extend方法。

MCCLS的博客 328

Vue原理 【 Vue.extends 】

前言 首先:我们引用官方的案例,先来认识一下 vue.extends Api 的介绍和用法 Vue.extends(options) 使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象 data 选项是特例,需要注意 - 在 Vue.extend() 中它必须是函数 <div id="mount-point"></div> // 创建构造器 var Profile = Vue.extend({ template: '<p>{{firstName}

HiSen的博客 2154

data的值 如何初始化vue_vue data初始化的两种方式

vue data有两种初始化的方式,function和object,但是这两种情况适用场景有哪些?能不能通用?带着这两个问题咱们一起分析下data初始化1234567891011121314151617// 代码来源于官网示例// 第一种定义方式var data = { a: 1 }// 直接创建一个实例var vm = new Vue({data: data})// Vue.extend() 中...

weixin_39934640的博客 4779

vue process.env获取不到_从文档开始,重学vue(下)源码级别

此篇文章主要是从应用及源码层面讲解vue部分常用api,阅读起来可能略有难度,新手可以看《从文档开始,重学vue(上)》示例代码均在vue-cli3中完成Vue.extend()可以使用 extend 创建一个子类,该方法通常用于构建全局组件,如弹框组件等,下面我们就用它来制作个全局alert组件吧首先我们需要一个alert.vue组件,组件很简单就接受一个参数,然后有两个控制显示隐藏的...

weixin_39726131的博客 5388

手机查看网页源代码_组件化

  7.1 组件化组件化回顾组件注册Vue.extend调试组件注册过程组件创建过程组件实例的创建和挂载过程  一个 Vue 组件就是一个拥有预定义选项的一个 Vue 实例  一个组件可以组成页面上一个功能完备的区域,组件可以包含脚本、样式、模板  像上面这个图,我们可以把一个页面抽象成若干个组件,把这些组件组合成一个页面...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 358

vue alert 不弹框_从文档开始,重学vue(下)源码级别

此篇文章主要是从应用及源码层面讲解vue部分常用api,阅读起来可能略有难度,新手可以看《从文档开始,重学vue(上)》示例代码均在vue-cli3中完成Vue.extend()可以使用 extend 创建一个子类,该方法通常用于构建全局组件,如弹框组件等,下面我们就用它来制作个全局alert组件吧首先我们需要一个alert.vue组件,组件很简单就接受一个参数,然后有两个控制显示隐藏的...

weixin_36194553的博客 1450
上一篇: Iterator和Symbol
下一篇: Vue的相关基础知识的应用
ccxCode
博客等级 码龄8年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值