js中super关键字的使用

super关键字可以使用于对象,也可在类中使用,下面分别来说

  • 对象
 let parent = {name: 'lili',getName(){console.log(this.name)}
}
let son = {name: 'mike',getName(){super.getName()}
}
Object.setPrototypeOf(son, parent)
son.getName() // 'mike'

可以看到对象中“方法”通过super关键字调用原型上的方法,this指向了对象本身

我们再来改造一下上面的对象

let son = {name: 'mike',getName(){console.log(super.name)}
}
Object.setPrototypeOf(son, parent)
son.getName() // 'lili'

我们发现,在对象的方法通过super关键字调用原型上的属性时,返回了原型的属性值(此时,没有用到this哈)

从上面我们有了结论:
super.name
等同于
Object.getPrototypeOf(this).name【属性】
等同于
Object.getPrototypeOf(this).name.call(this)【方法】

字面意思:
super.name指向的是原型对象上的name,但是绑定的this还是当前的son对象,
只要在对象的方法上通过super调用原型的方法,this指向当前的子类实例。

 class Parent {constructor(name){this.name = name;}getName(){console.log(this.name)}
}
class Son extends Parent{constructor(name,age){this.age = agesuper(name)}getName(){super.getName()}
}
let son = new Son('mike', 18). // Uncaught ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

在上面利用extends实现了类的继承,但是我们实例化子类的时候报错了,看报错信息,我们可以知道:子类没有自己的this对象,而是继承父亲的this对象,然后进行加工。如果不调用super,子类就得不到this对象

所以上面的代码,要先调用super,然后在对this进行操作.我们修改一下代码

class Parent {constructor(name){this.name = name;}getName(){console.log(this.name)}
}
class Son extends Parent{constructor(name,age){super(name)this.age = age}getName(){super.getName()}
}
let son = new Son('mike', 18)
son.getName() //mike

将super调用置于this之前,可以正常运行,上看是再有constructor方法的时候,那么,如果没有constructor那有如何呢?

class Parent {constructor(name){this.name = name;}getName(){console.log(this.name)}
}
class Son extends Parent{}
let son = new Son('mike')
son.getName() //'mike'

发现在类的继承中,子类如果没有constructor方法,那么super调用会默认被添加到子类中,使得子类可以正常被初始化

上面的super对方法的调用时普通方法,那如果super调用的是静态方法呢?来试试添加一下静态方法吧

class Parent {constructor(name){this.name = name;}static sayHello(){console.log('hello')}getName(){console.log(this.name)}
}
class Son extends Parent{static testStatic(){super.sayHello()}
}
Son.testStatic(). // 'hello'

我们发现,在静态方法中使用super,那么这个super将指向父类本身,在普通方法中调用super,此时super将指向父类的原型对象

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

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

相关文章

宜选影票在线选座电影票小程序开发如何获取api接口?

要开发一个在线选座电影票小程序并获取API接口,你需要遵循几个关键步骤。以下是通常的流程: 明确需求和目标: 在开始之前,明确你的小程序需要哪些功能,例如电影查询、场次查询、在线选座、购票支付等。确定你需要从AP…

普通人适合做大模型吗?过程中会发生什么潜在的挑战?

对于普通人来说,直接进行大模型的研发和训练可能存在一定的挑战,因为这通常需要以下资源和知识: 专业知识: 大模型的开发需要深入理解机器学习、深度学习、神经网络等领域的知识。 计算资源: 大模型的训练需要高性能的…

Docker基本操作 挂载数据卷

在创建一个容器的时候让容器挂载到一个数据卷: 命令:docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx 这里的数据卷如果没有提前创好会自动创建 下边是命令解析 将容器挂载到一个数据卷之后 可以在查看数据卷的目录 在数据卷的目录可以找到容器的内容…

Cloudera简介与安装部署

Cloudera简介与安装部署 Cloudera是一家领先的大数据和分析平台提供商,其产品Cloudera Data Platform (CDP) 是一个全面的数据管理和分析平台,旨在帮助企业从大量数据中提取价值。CDP结合了开源大数据技术,如Apache Hadoop、Spark和Kafka&am…

小度二次开发中的java流式数据请求及返回

背景:小度大模型对接实现即小度二次开发接口对接-CSDN博客 为了接收CURL接口返回的流式数据并进行流式返回,我们需要对sendHttpRequest方法进行修改,使其能够处理InputStream并将其转换为流式返回的数据。以下是修改后的示例代码: import java.net.URI; import java.net.ht…

比亚迪CAN数据实时监控分析应用数字化差异化的决策价值洞察

在当今这个信息化飞速发展的时代,汽车数字化转型已成为企业持续竞争力的关键。中国新能源汽车行业的领军企业——比亚迪,其数字化之旅充分展现了企业的创新精神和对未来的深远洞察。 比亚迪的数字化战略不是简单的技术应用,而是一场深刻的商…

【算法】基础算法004之前缀和

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 本篇文章为大家带来前缀和…

【强训笔记】day14

NO.1 思路&#xff1a;用一个哈希表&#xff0c;先遍历s1&#xff0c;统计哈希表内的字符个数&#xff0c;在遍历s2&#xff0c;s2中的字符在哈希表中减去&#xff0c;如果哈希表中的字符个数小于0那么就输出No。 代码实现&#xff1a; #include <iostream> #include&…

森林消防—高扬程水泵:守护绿色屏障的专业利器/恒峰智慧科技

在广袤的森林中&#xff0c;火灾无疑是最具破坏性的灾难之一。为了及时应对森林火灾&#xff0c;保护珍贵的自然资源和生态平衡&#xff0c;高效的消防设备显得尤为重要。森林消防高扬程水泵便是其中一款专业设备&#xff0c;以其高效输送水源的能力&#xff0c;成为守护森林绿…

LabVIEW实现多张图像拼接

在LabVIEW环境中实现多张图片拼接的应用开发&#xff0c;是一种常见的需求&#xff0c;尤其是在大型物体或广阔场景的成像过程中。以下内容将详细介绍这一过程的实现方法、注意事项以及相关的系统优化。 概述 在LabVIEW中&#xff0c;实现多张图片的拼接主要依赖于图像处理模…

doris经典bug

在部署完登录web页面查看的时候会发现只有一个节点可以读取信息剩余的节点什么也没读取到 在发现问题后&#xff0c;我们去对应的节点去看log日志&#xff0c;发现它自己绑定到前端的地址上了 现在我们已经发现问题了&#xff0c;以下就开始解决问题 重置doris 首先对be进行操…

使用 Docker 部署 TaleBook 私人书籍管理系统

1&#xff09;项目介绍 GitHub&#xff1a;https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建&#xff0c;具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…

矾液回收矾树脂

五氧化二钒溶液提取矾树脂A-654的过程&#xff0c;是一个涉及五氧化二钒提纯的重要步骤。我们将详细介绍这一提取过程。 首先&#xff0c;我们需要了解五氧化二钒和净化矾树脂A-654的基本性质。五氧化二钒是一种无机化合物&#xff0c; 净化矾树脂A-654 是一款加载了复杂的多胺…

亚马逊最新的 Echo Show 5 和 Show 8

爆爆&#xff01;亚马逊最新智能显示器终于来了&#xff01;Show 8可是一个功能超强的小工具&#xff0c;既能当数码相框、智能家居控制器和闹钟&#xff0c;还能控制您家中的几乎所有设备&#xff01;8英寸的显示屏让您流媒体和视频通话体验更加流畅&#xff01; 如果您不需要…

【Python】京东商品详情数据采集返回商品详情主题主图SKU

文章目录 Python请求 京东API接口 接入文档 接入参数 返回示例 Python请求 # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pip install requests """ from __future__ import print_function import requests…

算法基础01一快速排序,归并排序,二分

一.排序 1.快速 排序 基于分治 确定分界点 左 右 中间 随机划分区间 左半边<x >x在右半边递归处理左右两端 #include<iostream>using namespace std;const int N 1e6 10;int n; int q[N]; void quick_sort(int q[],int l,int r) {if(l>r)return;//边界&…

JAVA学习-练习试用Java实现重复的DNA序列

问题&#xff1a; 所有 DNA 都由一系列缩写为 A&#xff0c;C&#xff0c;G 和 T 的核苷酸组成&#xff0c;例如&#xff1a;"ACGAATTCCG"。在研究 DNA 时&#xff0c;识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来找出所有目标子串&#xff0c;目…

东莞厂家冷风机的通风降温优点

工业冷风机的通风降温优点主要体现在以下几个方面&#xff1a; 高效降温&#xff1a;工业冷风机采用水蒸发原理&#xff0c;通过将热空气经过湿帘或水幕冷却&#xff0c;能够迅速降低空气温度。这种降温方式相比传统压缩机空调系统更为高效&#xff0c;有助于员工在高温环境中…

数据多且不分页,前端渲染dom如何优化性能

js判断子节点有没有进入父节点可视区域 在React项目中&#xff0c;你可以使用useEffect钩子和IntersectionObserver API来实现这个功能。下面是一个例子&#xff1a; 首先&#xff0c;创建一个子组件 ChildComponent&#xff1a; import React, { useEffect, useRef } from …

【新三个数排序的自创算法,这是我厉年来很满意的一次排序算法设计,最好小于O(N)最坏O((NN/3)/2)。】2024-5-7

缘由如何用C&#xff0b;&#xff0b;解决一下问题_编程语言-CSDN问答 int a[]{1, 4, 7, 8, 5, 2, 3, 6, 9, 7}, n 10, x n, jh 0, j 0;px:if (j < n) {//缘由https://ask.csdn.net/questions/8099444if (--x < 2 j)x n - 1, j 3;if (x < n - 1 && a[x…