当前位置: 首页 > news >正文

ES6 class类关键字super

super关键字

        在 JavaSCript 中,能通过 extends 关键字去继承父类

        super 关键字在子类中有以下用法:

  •  当成函数调用 super()
  •  作为 "属性查询" super.prop 和 super[expr]

super()

        super 作为函数调用时,代表父类的构造函数。

        ES6 要求,子类的构造函数必须执行一次 super() 函数。

        注意:作为函数时,super() 只能用在子类的构造函数之中,用在其他地方就会报错。

class A {}
class B extends A {constructor() {super();}
}

        super 作为函数调用时,内部的 this 指的是子类实例。

class A {constructor() {this.print();}print(){console.log('这是A');}
}
class B extends A {constructor() {super();}print(){console.log('这是B');}
}
new B() // 这是B
// 继承了A的print
class A {constructor() {this.print();}print(){console.log('这是A');}
}
class B extends A {constructor() {super();}
}
new B() // 这是A

    

super.prop

  • 在普通方法中,指向父类的原型对象;
  • 在静态方法中,指向父类。

       

        普通方法

        这里的super指向父类原型对象,即 A.prototype

class A {x = 2p() {return this.x;}
}
class B extends A {print(){console.log(super.p())}
}
const a = new B()
a.print() // 2

        由于在普通方法中的 super 指向父类的原型对象,而A的CLASS写法其实是:

function A() {this.x = 2;}A.prototype.print = function () {return this.x
};

        所以我们能够在父类A的原型对象上找到print方法。那么如果是这样:

class A {x = 2
}
class B extends A {print(){console.log(super.x)}
}
const a = new B()
a.print() // undefined

       自2022年之后,实例属性现在除了可以定义在constructor()方法里面的this上面,也可以定义在类内部的最顶层。所以这里的x=2其实等同于constructor(){this.x = 2};

         如果父类上的方法或属性是定义在实例上的,就无法通过 super 调用的

       

         在子类普通方法中通过 super 调用父类的方法时,方法内部的 this 指向的是当前的子类实例。

class A {constructor() {this.x = 1;}print() {console.log(this.x);}
}
class B extends A {constructor() {super();this.x = 2;super.y = 123;  //如果通过super对某个属性赋值,这时super就是this,赋值的属性会变成子类实例的属性。}m() {super.print();}
}
let b = new B();
b.m() // 2
console.log(b.y);  //123

        静态方法

        super作为对象,用在静态方法之中,这时 super 将直接指向父类,而不是父类的原型对象。

class Parent {static myMethod(msg) {console.log('static', msg);}myMethod(msg) {console.log('instance', msg);}
}
class Child extends Parent {static myMethod(msg) {super.myMethod(msg);}myMethod(msg) {super.myMethod(msg);}
}
Child.myMethod(1); // static 1
var child = new Child();
child.myMethod(2); // instance 2

        在子类的静态方法中通过 super 调用父类的方法时,方法内部的 this 指向当前的子类,而不是子类的实例。

class A {constructor() {this.x = 1;}static print() {console.log(this.x);}
}
class B extends A {constructor() {super();this.x = 2;}static m() {super.print();}
}
B.x = 3;
B.m() // 3

相关文章:

ES6 class类关键字super

super关键字 在 JavaSCript 中,能通过 extends 关键字去继承父类 super 关键字在子类中有以下用法: 当成函数调用 super() 作为 "属性查询" super.prop 和 super[expr] super() super 作为函数调用时,代表父类的构造函数。 ES6 要求…...

C++并发与多线程(4) | 传递临时对象作为线程参数的一些问题Ⅰ

一、陷阱1 写一个传递临时对象作为线程参数的示例: #include <iostream> #include <vector> #include <thread> using namespace std;void myprint(const int& i, char* pmybuf) {cout << i << endl;cout << pmybuf << endl;r…...

CentOS Integration SIG 正式成立

导读CentOS 董事会已批准成立 CentOS Integration Special Interest Group (SIG)。该小组旨在帮助那些在 Red Hat Enterprise Linux (RHEL) 或特别是其上游 CentOS Stream 上构建产品和服务的人员&#xff0c;验证其能否在未来版本中继续运行。 红帽 RHEL CI 工程师 Aleksandr…...

智能AI系统源码ChatGPT系统源码+详细搭建部署教程+AI绘画系统+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Chat…...

软考程序员考试大纲(2023)

文章目录 前言一、考试说明1.考试目标2.考试要求3&#xff0e;考试科目设置 二、考试范围考试科目1&#xff1a;计算机与软件工程基本知识1&#xff0e;计算机科学基础2&#xff0e;计算机系统基础知识3&#xff0e;系统开发和运行知识4&#xff0e;网络与信息安全基础知识5&am…...

【重拾C语言】七、指针(一)指针与变量、指针操作、指向指针的指针

目录 前言 七、指针 7.1 指针与变量 7.1.1 指针类型和指针变量 7.1.2 指针所指变量 7.1.3 空指针、无效指针 7.2 指针操作 7.2.1 指针的算术运算 7.2.2 指针的比较 7.2.3 指针的递增和递减 7.3 指向指针的指针 前言 指针是C语言中一个重要的概念正确灵活运用指针 可…...

Kafka源码简要分析

目录 一、生产者的初始化流程 二、生产者到缓冲队列的流程 三、Sender拉取数据到Kafka流程 四、消费者初始化 五、主题订阅原理 六、消费者抓取数据原理 七、消费者组初始化 八、消费者组消费流程 九、提交offset原理 一、生产者的初始化流程 首先获取事务id和客户端…...

react 按住ctrl键,点击时会出现菜单的问题修复

问题描述&#xff1a;我需要按住crtl键&#xff0c;然后鼠标点击后做一些逻辑操作&#xff0c;但是出现如下问题 问题一&#xff1a;按住ctrl键后&#xff0c;点击时不触发click事件&#xff0c;只触发 mousedown和mouseup事件。 问题二&#xff1a;按住ctrl键点击时出现菜单…...

【虚拟机栈】

文章目录 1. 虚拟机栈概述2. 局部变量表(Local Variables)3. 操作数栈4. 动态链接4.1 方法的调用&#xff1a;解析与分配 5. 方法返回地址6. 栈的相关面试题 1. 虚拟机栈概述 每个线程在创建时都会创建一个虚拟机栈&#xff0c;其内部保存一个个的栈帧&#xff08;Stack Frame…...

Linux系列讲解 —— 【fsck】检查并修复Linux文件系统

当文件系统出现损坏时&#xff0c;例如文件无法查看&#xff0c;删除等&#xff0c;可以使用 fsck&#xff08;File System Consistency Check&#xff09;进行修复。但是需要注意fsck在修复时&#xff0c;如果检查出某个文件有问题&#xff0c;可能会向用户请求删除。所以&…...

gitlab突然提示我要输入密码了。

用了很长时间的一个gitlab库&#xff0c;今天提交代码的时候突然提示我输入密码了&#xff0c;并且用户还是gitxx.xx.xx.xx的&#xff0c;瞬间懵逼。 想想原因&#xff0c;可能是因为我不久前设置了本地对另外一个git库的远程访问&#xff0c;用的是ssh&#xff0c;操作过程中可…...

业务测试常见问题(一)

如何多维度的分析一个需求&#xff1f; 功能维度&#xff1a;需求中所描述的功能是否实现&#xff0c;与用户的需求是否一致&#xff0c;是否完整符合用户的需求等。 安全性维度&#xff1a;是否有安全漏洞&#xff0c;是否存在未授权访问漏洞等&#xff0c;以保证系统的安全性…...

IntelliJ IDEA失焦自动重启服务的解决方法

IDEA 热部署特性 热部署&#xff0c;即应用正属于运行状态时&#xff0c;我们对应用源码进行了修改更新&#xff0c;在不重新启动应用的情况下&#xff0c;可以能够自动的把更新的内容重新进行编译并部署到服务器上&#xff0c;使修改立即生效。 现象 在使用 IntelliJ IDEA运…...

终端准入控制系统,保障企业内网安全的关键防线

随着网络技术的不断发展&#xff0c;企业面临的安全威胁也越来越多。终端作为承载企业业务的媒介&#xff0c;对内网资产安全有着重要影响。确保内网终端&#xff08;如PC、BYOD、IoT等&#xff09;能够得到统一管理&#xff0c;对保护内网安全很有必要。终端准入控制作为一种有…...

mysql-执行计划

1. 执行计划表概述 id相同表示加载表的顺序是从上到下。 id不同id值越大&#xff0c;优先级越高&#xff0c;越先被执行。id有相同&#xff0c;也有不同&#xff0c;同时存在。 id相同的可以认为是一组&#xff0c;从上往下顺序执行&#xff1b;在所有的组中&#xff0c;id的值…...

金蝶云星空和旺店通·企业奇门接口打通对接实战

金蝶云星空和旺店通企业奇门接口打通对接实战 接入系统&#xff1a;金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在…...

在服务器上使用nginx改变前端项目请求的url

location /app-dev {rewrite ^/app-dev/(.*) /$1 break;proxy_pass http://152.136.36.251:9999;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; } location /请求后缀 { rewrite ^/app-dev/(.*) /$1 break; proxy_pass 想要的请求后端的url; …...

【学习笔记】莫比乌斯反演

退役OIer回来受虐啦 一些定义 μ ( x ) { 1 x > 1 ( − 1 ) n x ∏ i 1 n P i 0 o t h e r w i s e \mu(x) \begin{cases} 1 & x > 1 \\ (-1)^n & x \prod _ {i1} ^ {n} P_{i}\\ 0 & otherwise \end{cases} μ(x)⎩ ⎨ ⎧​1(−1)n0​x>1x∏i1n​Pi…...

一款构建Python命令行应用的开源库

1 简介 当我们编写 Python 程序时&#xff0c;我们经常需要与用户进行交互&#xff0c;接收输入并输出结果。Python 提供了许多方法来实现这一点&#xff0c;其中一个非常方便的方法是使用 typer 库。typer 是一个用于构建命令行应用程序的 Python 库&#xff0c;它使得创建命令…...

10-Node.js模块化

01.模块化简介 目标 了解模块化概念和好处&#xff0c;以及 CommonJS 标准语法导出和导入 讲解 在 Node.js 中每个文件都被当做是一个独立的模块&#xff0c;模块内定义的变量和函数都是独立作用域的&#xff0c;因为 Node.js 在执行模块代码时&#xff0c;将使用如下所示的…...

鸿蒙ArkTS项目避坑指南:从零搭建外卖应用时,我踩过的那些‘坑’

鸿蒙ArkTS实战避坑手册&#xff1a;外卖应用开发中的12个致命陷阱 第一次在DevEco Studio里看到ArkTS的语法高亮时&#xff0c;我以为这不过是又一个前端框架的变种——直到我的外卖应用项目在模拟器上连续崩溃了七次。作为从Android原生开发转向鸿蒙的"老手"&#x…...

Qwen3-TTS-Tokenizer-12Hz实操手册:音频峰值检测与动态范围压缩联动

Qwen3-TTS-Tokenizer-12Hz实操手册&#xff1a;音频峰值检测与动态范围压缩联动 1. 引言&#xff1a;音频处理的关键挑战 音频处理中经常遇到两个棘手问题&#xff1a;一是音频信号动态范围过大导致某些部分听不清&#xff0c;二是峰值过高造成失真。传统方法需要分别处理这两…...

保姆级教程:用C++刷穿GPLT天梯赛L1基础题(附避坑指南)

从零开始征服GPLT天梯赛&#xff1a;C选手的L1解题全攻略 第一次接触GPLT天梯赛的L1级别题目时&#xff0c;我盯着屏幕上那道关于"零头就抹了吧"的数学题发呆了整整十分钟。作为过来人&#xff0c;我完全理解新手面对算法竞赛时那种既兴奋又忐忑的心情。本文将用最接…...

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战

1. 为什么选择富斯i6遥控器与STM32通信 对于很多刚接触机器人或者智能小车开发的爱好者来说&#xff0c;无线控制模块的选择往往是个头疼的问题。市面上常见的方案要么价格昂贵&#xff0c;要么配置复杂&#xff0c;而富斯i6遥控器配合iA6B接收机恰好提供了一个低成本、高可靠性…...

DICOM RT Structure深度解析——从文件结构到靶区可视化

1. DICOM RT Structure文件基础认知 第一次接触DICOM RT Structure文件时&#xff0c;我完全被那些密密麻麻的标签和序列搞晕了。这就像拿到一份没有目录的医学百科全书&#xff0c;所有内容都堆在一起。但经过几个项目的实战&#xff0c;我发现只要抓住三个核心序列&#xff0…...

UMA模型吸附能预测实战指南:从催化剂筛选到工业应用

UMA模型吸附能预测实战指南&#xff1a;从催化剂筛选到工业应用 【免费下载链接】ocp Open Catalyst Projects library of machine learning methods for catalysis 项目地址: https://gitcode.com/GitHub_Trending/oc/ocp 核心价值速览 在催化材料研发领域&#xff0…...

噪声系数测试中的Y因子:为什么ENR超噪比是你的关键指标?

噪声系数测试中的Y因子&#xff1a;为什么ENR超噪比是你的关键指标&#xff1f; 在无线通信系统的设计与验证中&#xff0c;噪声系数&#xff08;Noise Figure&#xff09;是衡量接收机灵敏度的核心参数之一。而Y因子法作为噪声系数测试的黄金标准&#xff0c;其准确度很大程度…...

PDF-Extract-Kit-1.0教育应用:教材习题自动识别与题库构建

PDF-Extract-Kit-1.0教育应用&#xff1a;教材习题自动识别与题库构建 1. 引言 老师们每天都要面对一大堆教材PDF&#xff0c;里面藏着无数宝贵的习题资源。但手动把这些题目一个个抄出来&#xff0c;整理成电子题库&#xff0c;简直是个噩梦——费时费力还容易出错。有没有什…...

uni-app微信小程序版本更新策略:冷启动与热启动的优化实践

1. 理解uni-app微信小程序的启动机制 开发过微信小程序的同行应该都遇到过这样的困扰&#xff1a;明明已经发布了新版本&#xff0c;但部分用户反馈看到的还是旧版内容。这种情况在uni-app开发的微信小程序中尤为常见&#xff0c;因为uni-app的编译机制和微信原生小程序存在一些…...

OpenClaw故障排查大全:GLM-4.7-Flash接口连接失败的7种解决方法

OpenClaw故障排查大全&#xff1a;GLM-4.7-Flash接口连接失败的7种解决方法 1. 问题背景与现象描述 上周在尝试将本地部署的GLM-4.7-Flash模型接入OpenClaw时&#xff0c;我遇到了令人抓狂的接口连接问题。明明模型服务已经正常启动&#xff0c;OpenClaw配置看起来也没问题&a…...