ES6父子继承中:this指向和执行顺序究竟是如何工作的?

es6父子继承中:this指向和执行顺序究竟是如何工作的?

深入理解ES6父子继承中的this指向和执行顺序

ES6中的继承机制有时会令人困惑,尤其涉及this指向和执行顺序。本文将通过代码示例,详细分析这两个关键问题。

class Parent {  constructor() {    console.log('parent constructor', this.name);    this.init();    this.logNum = this.logNum.bind(this);  }  name = (() => {    console.log('Parent name init');    return 'Parent';  })();  num = -1;  init() {    console.log('parent init', this.name);  }  logNum() {}}class Child extends Parent {  constructor() {    console.log('Child constructor');    super();    console.log('super exec finish', this.num);  }  name = 'Child';  num = (() => {    console.log('Child num init');    return 99;  })();  init() {    console.log('Child init', this.name);    super.init();    this.num = 10;  }  logNum() {    console.log(this.num);  }}const { logNum } = new Child();logNum();

问题一:Parent构造函数中this.name为何为’Parent’?

Child实例化过程中,首先执行Parent的构造函数。虽然thisParent构造函数内部指向Child实例,但name属性的初始化发生在构造函数执行之前。此时,this指向的是Parent的原型,因此name的值为’Parent’。

问题二:实例属性(例如x = 'a')的初始化时机?

实例属性的初始化发生在构造函数执行之前。当Parent构造函数调用super()时,会先执行父类的构造函数,初始化父类的实例属性;之后,才会执行子类的构造函数,初始化子类的实例属性。

总结:ES6继承中属性初始化顺序

父类类字段初始化(静态属性)父类构造函数初始化实例属性子类类字段初始化(静态属性)子类构造函数初始化实例属性

通过以上分析,我们对ES6父子继承中的this指向和执行顺序有了更清晰的理解,有助于避免潜在的错误。

以上就是ES6父子继承中:this指向和执行顺序究竟是如何工作的?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1502196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ES6父子继承中this指向和执行顺序究竟是怎样的?
上一篇 2025年12月20日 00:30:19
ahooks中useRequest如何实现多接口并发请求及顺序控制?
下一篇 2025年12月20日 00:30:32

相关推荐

  • JavaScript 中基于条件增量计数器的实现与循环结构应用

    本教程详细阐述了如何在JavaScript中根据特定条件(如另一个变量是偶数)来递增计数器。文章强调了正确使用模运算符进行条件判断的重要性,并深入探讨了如何通过while或for循环结构实现持续的条件计数逻辑,提供了清晰的代码示例和实践建议,帮助读者构建健壮的条件计数功能。 在许多编程场景中,我们需…

    2025年12月20日
    000
  • 每次 i 是 2 的倍数时,如何将 count 的值增加 1?

    本文旨在讲解如何实现一个计数器,当变量 i 是 2 的倍数时,将计数器 count 的值增加 1。文章将提供代码示例,并解释如何使用循环结构来达到预期效果。同时,也会指出常见的错误和注意事项,帮助读者理解和掌握该技巧。 实现思路 核心思路是使用取模运算符(%)来判断 i 是否为 2 的倍数。如果 i…

    2025年12月20日
    000
  • JavaScript教程:在循环中根据条件递增计数器

    本文旨在帮助开发者理解如何在JavaScript循环中,当某个变量满足特定条件(例如是2的倍数)时,有选择性地递增计数器。我们将通过代码示例和详细解释,展示如何实现这一功能,并提供一些最佳实践建议,确保代码的正确性和效率。 在JavaScript中,经常需要在循环过程中,根据某些条件来更新计数器的值…

    用户投稿 2025年12月20日
    000
  • 深入解析 React Router v6 路由匹配机制

    React Router v6 通过 Routes 组件和路径排名系统实现路由匹配。它将当前 URL 与定义的路由路径进行比较,并根据路径的特异性(更具体路径排名更高)选择最佳匹配项,从而有条件地渲染对应的 UI 组件。这一机制确保了即使存在通配符路由,也能优先匹配到更精确的路径,避免了不必要的组件…

    2025年12月20日
    000
  • JavaScript 中根据条件递增计数器的正确方法

    本文旨在讲解如何在 JavaScript 中实现一个计数器,该计数器在特定条件(例如,当另一个变量 i 是 2 的倍数时)满足时递增。我们将讨论常见的错误,并提供一个完整的示例,展示如何使用循环结构来实现此功能。 核心概念 实现此功能的关键在于理解以下几点: 条件判断: 使用 % (取模) 运算符来…

    2025年12月20日
    000
  • MongoDB:提取指定时间段内的数据(10:00 AM – 11:00 AM)

    本文旨在指导开发者如何使用 MongoDB 聚合管道高效地提取指定时间段内的数据,例如从上午 10:00 到 11:00 之间的数据。文章将提供详细的聚合管道示例,并解释每个阶段的作用,帮助读者理解并应用到实际场景中。 在 MongoDB 中,经常需要根据时间范围来查询和分析数据。以下将演示如何使用…

    2025年12月20日
    000
  • MongoDB:按小时范围提取数据(10:00 AM – 11:00 AM)

    本文介绍了如何使用 MongoDB 聚合管道从指定时间范围内(例如,上午 10:00 到上午 11:00)提取数据。通过 $match 阶段筛选指定时间段内的文档,并利用 $project 和 $group 阶段对数据进行重塑和分组,最终得到所需的结果。 使用 Aggregate Pipeline …

    2025年12月20日
    000
  • MongoDB:提取指定时间段(10:00 AM – 11:00 AM)内的数据

    本文旨在指导开发者如何使用 MongoDB 聚合管道高效地提取指定时间段内的数据,以示例展示如何从包含时间戳字段的文档中,筛选出 10:00 AM 到 11:00 AM 之间的数据,并将其按照小时进行分组,最终得到包含每分钟对应能量值的聚合结果。 使用聚合管道提取指定时间段数据 在 MongoDB …

    2025年12月20日
    100
  • JavaScript双指针技巧:反转字符串中的元音字母

    本文旨在讲解如何使用双指针技巧解决LeetCode上的“反转字符串中的元音字母”问题。我们将深入探讨使用JavaScript实现此算法时需要注意的细节,特别是关于变量赋值和临时变量使用的重要性。通过对比两种不同的交换变量方法,帮助读者理解其背后的原理,从而写出更健壮、更高效的代码。 使用双指针反转元…

    2025年12月20日
    000
  • JavaScript双指针法反转元音字母:为何临时变量至关重要

    本文旨在阐述使用JavaScript双指针法解决LeetCode反转元音字母问题时,直接赋值交换与使用临时变量交换的区别。通过代码示例和原理分析,深入理解临时变量在正确实现元素交换中的作用,避免因疏忽导致逻辑错误,并掌握双指针法的应用技巧。 双指针法反转元音字母 双指针法是一种常用的算法技巧,尤其适…

    2025年12月20日
    000
  • MongoDB:按小时范围查询数据的最佳实践

    本文旨在指导开发者如何在 MongoDB 中高效地查询指定小时范围内的数据。通过使用 $match 阶段配合 $gte 和 $lt 操作符,精确筛选出符合时间范围的文档。同时,结合 $project 和 $group 阶段,可以对查询结果进行灵活的格式化和聚合,满足各种数据分析需求。 在 Mongo…

    2025年12月20日
    000
  • 事件循环中的“任务超时”是什么?

    事件循环中的“任务超时”是什么?事件循环中的“任务超时”是什么?事件循环中的“任务超时”是什么?事件循环中的“任务超时”是什么?

    1.任务超时指javascript单线程执行耗时任务导致页面卡死,浏览器可能弹出脚本无响应警告;2.根本原因是单线程模型下长任务独占主线程,阻塞用户交互、渲染等后续任务;3.可用performance面板查看长任务、火焰图定位耗时函数,结合console.time或代码审查识别问题代码;4.解决策略…

    2025年12月20日 用户投稿
    100
  • js 怎样用countBy统计数组元素出现次数

    使用 map 替代普通对象可提升大数组的计数性能,因 map 在处理大量键值对时更高效;2. 对于超大数组,可结合 web workers 将计算移至后台线程,避免阻塞主线程;3. 当数组元素为对象时,需通过 keyextractor 函数提取唯一键(如 id)或序列化对象为稳定字符串作为计数依据,…

    2025年12月20日
    000
  • js如何判断变量是否为函数

    判断javascript变量是否为函数,最简单的方法是使用typeof运算符,它对函数返回”function”;2. 更可靠的方法是使用object.prototype.tostring.call(),其返回值为”[object function]”时…

    2025年12月20日
    000
  • js 怎么用averageBy计算对象数组的属性平均值

    计算对象数组某属性平均值最常用方法是使用 reduce 或 foreach 遍历累加有效数值并除以有效个数,1. 首先校验输入数组是否为空或非数组,是则返回 nan;2. 遍历数组,通过 typeof value === ‘number’ && !isnan(…

    2025年12月20日
    000
  • js怎样监听滚动事件

    js怎样监听滚动事件js怎样监听滚动事件js怎样监听滚动事件js怎样监听滚动事件

    javascript通过addeventlistener监听滚动事件,可绑定到window或特定元素。1. 判断滚动方向需记录上次滚动位置,比较当前与上次的scrolltop值,若当前更大则向下滚动,否则向上滚动。2. 性能优化常用节流(每间隔固定时间执行一次)、防抖(停止触发后延迟执行)和requ…

    2025年12月20日 用户投稿
    100
  • javascript闭包如何延迟变量初始化

    javascript闭包如何延迟变量初始化javascript闭包如何延迟变量初始化javascript闭包如何延迟变量初始化javascript闭包如何延迟变量初始化

    是的,javascript闭包能实现变量的延迟初始化,其核心机制是内部函数保留对外部作用域变量的引用,从而将对变量的处理推迟到函数被调用时;1. 闭包通过捕获外部函数中的变量,使这些变量在外部函数执行完毕后仍不被销毁;2. 对变量的计算或使用被延迟到内部函数实际调用时才执行,实现按需处理;3. 这种…

    2025年12月20日 用户投稿
    000
  • js中如何解析pdf

    js中如何解析pdfjs中如何解析pdfjs中如何解析pdfjs中如何解析pdf

    在javascript中解析pdf最直接有效的方式是使用pdf.js库;2. 该库能渲染pdf到canvas并提取文本、图像和元数据;3. 实现需引入pdf.min.js和pdf.worker.min.js,通过cdn或npm加载;4. 核心步骤包括设置worker路径、加载pdf、获取页面、渲染到…

    2025年12月20日 用户投稿
    000
  • js 怎么用deepFlatten递归扁平化数组

    要用 javascript 递归扁平化一个数组,核心思路是遍历每个元素并递归处理子数组,1. 遍历数组中的每一项,2. 若当前项是数组,则递归调用函数将其扁平化,并将结果合并到最终数组,3. 若不是数组,则直接将其添加到结果数组,4. 最终返回完全扁平化的一维数组,该方法天然适合处理未知深度的嵌套结…

    2025年12月20日
    000
  • js怎么获取当前时间的时间戳

    在javascript中获取当前时间的时间戳,推荐使用date.now(),因为它是静态方法,无需创建实例,性能更优且代码简洁;而new date().gettime()需先创建date对象再调用实例方法,略显冗余且性能稍低;两者均返回自1970年1月1日utc以来的毫秒数;1. date.now(…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信