详解super()函数

super()函数用于访问和调用一个对象上的父对象上的函数。

前言

super.prop 和 super[expr]表达式在类和对象字面量任何方法定义中都是有效的。

一、语法?

super([arguments])
//调用 父对象/父类 的构造函数
super.functionOnParent([arguments]);
//调用 父对象/父类 上的方法

二、描述

在构造函数中使用时,super关键字将单独出现,并且必须在使用this关键字之前使用。
super关键字也可以调用父对象上的函数。

三、示例

1:在类中使用super

    class Polygon {constructor(height, width) {this.name = 'Rectangle';this.height = height;this.width = width;}sayName() {console.log('Hi, I am a ', this.name + '.');}get area() {return this.height * this.width;}set area(value) {this._area = value;}}class Square extends Polygon {constructor(length) {this.height; // ReferenceError,super 需要先被调用!// 这里,它调用父类的构造函数的,// 作为Polygon 的 height, widthsuper(length, length);// 注意: 在派生的类中, 在你可以使用'this'之前, 必须先调用super()。// 忽略这, 这将导致引用错误。this.name = 'Square';}}let p = new Polygon(10,20);p.sayName();


我们可以看到constructor中this指向这个实例,添加了height和name,width两个属性;并在它的原型对象上添加了sayName,get area方法;

调用super()函数,继承了父级函数的height和width;

2:调用父类上的静态方法

    class Rectangle {constructor() {}static logNbSides() {return 'I have 4 sides';}}class Square extends Rectangle {constructor() {super();
/**1.在通过new关键字创建对象时,会通过构造函数return一个实例对象。
2.此时若父类和子类均含有构造函数,则根据就近原则,会直接调用子类的构造函数。
此时就会报错了,因为根据继承的原则,在子类构造函数返回前,必须调用super父类构造函数。**/}static logDescription() {console.log(super.logNbSides() + ' which are all equal');}}let s = new Square();Square.logDescription(); // 'I have 4 sides which are all equal'

3:删除 super 上的属性将抛出异常

class X {constructor() {Object.defineProperty(this, 'prop', {configurable: true,writable: false, value: 1});}
}class Y extends X {constructor() {super();}foo() {super.prop = 2;   // Cannot overwrite the value.}
}var y = new Y();
y.foo(); // TypeError: "prop" is read-only
console.log(y.prop); // 1

4:在对象字面量中使用super.prop

var obj1 = {method1() {console.log("method 1");}
}var obj2 = {method2() {super.method1();}
}Object.setPrototypeOf(obj2, obj1);
obj2.method2(); // logs "method 1"

详解super()函数相关推荐

  1. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  2. 一分钟详解initUndistortRectifyMap函数bug修复方法

    本文首发于微信公众号「3D视觉工坊」--一分钟详解initUndistortRectifyMap函数bug修复方法 在上一篇文章OpenCV中initUndistortRectifyMap函数存在bu ...

  3. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  4. 详解虚函数的实现过程之菱形继承(5)

    大家看到标题,会不会菱形继承的虚表会不会是重复的呢?祖父类的虚表会不会在子类会不会是两份相同呢?那么我们一起来探索一下吧,冲冲冲!! 首先我们来分析一下: 它一共定义了四个类,分别为CFurnitur ...

  5. 详解虚函数的实现过程之虚基类(4)

    博客虚函数实现过程3 时提到过虚基类,这里呢,我们来详细讲述一下: 当我们在虚函数的声明结尾处添加"=0",这种虚函数就被称为纯虚函数. 它好似一个没有实现只有声明的函数,它的存在 ...

  6. 详解虚函数的实现过程之多重继承(3)

    下面来一起探索一下多重继承时,有虚函数会怎么继承呢? 这里大家猜一下,SofaBed会占多少个字节呢? 首先我们是不是得猜一下它有几个虚表指针? 4* 4(4个int数据)+2*4(两个虚表指针)=2 ...

  7. 详解虚函数的实现过程之单继承(2)

    从汇编分析一下下面的多态模拟结构 利用 父类指针指向子类的特性,可以间接调用各子类中的虚函数. 虽然指针类型为父类,但由于虚表的排列顺序是按虚函数在类继承层次中首次声明的顺序依次排列的,因此,只要继承 ...

  8. 详解虚函数的实现过程之初探虚表(1)

    空对象它有一字节的大小,在没有任何成员变量但是却有虚函数的对象里,它的大小是四个字节,这是为什么呢? 因为含有虚函数的对象里,对象的起始地址往后四个字节其实是 一个指针,它指向了一个数组,这个数组的元 ...

  9. 详解Scala函数也是对象的特性

    详解Scala函数也是对象的特性

最新文章

  1. SecureCRT中sqlplus,使用Backspace删除时 ^H^H
  2. SAP MM 创建退货类型的公司间STO,报错 -No delivery type for returns processing assigned to item 00010-
  3. Android ORM 框架之 greenDAO 使用心得
  4. WinForm窗体拖动代码
  5. java基础篇---网络编程(TCP程序设计)
  6. Netty源码分析第3章(客户端接入流程)----第1节: 初始化NioSockectChannelConfig
  7. html swf转mp4,《swf转换成mp4及高清视频的方法》.docx
  8. vb mysql登录界面_VB\数据库--模拟系统登录界面
  9. 安装Windows系统提示Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT分区
  10. android+键盘键值修改器,键盘按键修改器
  11. SAR舰船检测数据集总结
  12. native工具备份mysql数据库_Navicat Premium实现mysql数据库备份/还原
  13. 计算机应用if函数题目,if函数练习题.doc
  14. 有电流平衡能力的6组白光LED驱动器MAX8790
  15. 【SmartDental】小组第一次会议纪要
  16. html5切西瓜游戏,体育游戏切西瓜教案
  17. 机器学习特征工程之特征缩放+无量纲化:非线性缩放(例如,sigmoid、tanh、arctan等)
  18. IDEA学习篇——finds duplicated code提示
  19. WPA3功能开发及验证
  20. 一图解说JAVA的项目结构

热门文章

  1. Hadoop 实战之分析专利引用数据集(三)
  2. iOS9.3.5越狱图文教程
  3. 如何获取手机根目录和sdcard的根目录
  4. UltraEdit 多词搜索
  5. PDF转换器的使用步骤
  6. 关于vscode中出现gopls was not able to find modules in your workspace报错的解决方案
  7. 解决No thread-bound request found: Are you referring to request attributes outside of an actual web.异常
  8. 2018-7-16 2-1 分别由signed 和unsigned 限定的 char,short,int,long类型变量的取值范围
  9. 表格提示html内容消失,如何解决Word里面的表格插入题注后页面上内容消失、无法编辑的问题...
  10. java web实验报告_JavaWeb实验报告