super是es6新出的关键字,它既可以当作函数使用,也可以当作对象使用,两种使用方法不尽相同

1.super用作函数使用的时候,代表父类的构造函数,es6规定在子类中使用this之前必须先执行一次super函数,super相当于Father.prototype.constructor.call(this)

class Father{
constructor(){
this.a = 1;
}
}
class Son extends Father{
constructor(){
super();
}
}

2.super用作对象的时候,在普通方法中指向父类的原型对象,在静态方法中指向父类

  子类中使用super无法访问Father的实例属性a,可以访问原型对象上的p

class Father {
constructor() {
this.a = 1;
}
p() {
     console.log(thia.a);
console.log('hello');
}
}
class Son extends Father {
constructor() {
super();
     this.a = 2;
super.p();//'2 hello' Father.prototype.p()方法内部的this指向的是子类实例
super.a;//undefined
}
}
  • 静态方法中指向的是父类,而非父类的构造函数
  • static method中super指向父类Parent,相当于访问Parent.myMethod
  • 普通  method中super指向父类Parent的prototype,相当于访问Parent.prototype.myMethod
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); //super指向父类因此访问的是static myMethod
}
myMethod(msg) {
super.myMethod(msg); //super指向的是父类的构造函数,访问的是Parent.prototype.myMethod
}
}
Child.myMethod(222);//static 222 let child = new Child;
child.myMethod(111);//instance 111

ES6对象的super关键字的更多相关文章

  1. ES6对象扩展

    前面的话 随着JS应用复杂度的不断增加,开发者在程序中使用对象的数量也在持续增长,因此对象使用效率的提升就变得至关重要.ES6通过多种方式来加强对象的使用,通过简单的语法扩展,提供更多操作对象及与对象 ...

  2. es6 super关键字

    rhttp://es6.ruanyifeng.com/#docs/class-extends super关键字,既可以当作函数使用,也可以当作对象使用.这俩种的使用是不一样的 第一种:函数使用 代表父 ...

  3. ES6中类Class的super关键字

    super 关键字,既可以当作函数使用,也可以当作对象使用.在这两种情况下,它的用法完全不同. 1.super当做函数使用 super 作为函数调用时,代表父类的构造函数.ES6 要求,子类的构造函数 ...

  4. ES6中class方法及super关键字

    ES6 class中的一些问题 记录下class中的原型,实例,super之间的关系 //父类 class Dad { constructor(x, y) { this.x = 5; this.y = ...

  5. Java基础super关键字、final关键字、static关键字、匿名对象整理

    super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...

  6. JAVA面对对象(三)——Super、static、final关键字

    Super 使用super关键字可以直接调用父类中的构造方法.属性.普通方法 super调用父类构造方法的操作,与this调用构造方法一样,语句必须放在子类构造方法的首行 public class P ...

  7. 浅谈ES6中super关键字

    作用: super 关键字用于访问父对象上的函数. 语法: super([arguments]); // 访问父对象上的构造函数 super.functionOnParent([arguments]) ...

  8. ES6中构造函数内super关键字的使用

    super关键字用于访问和调用一个对象的父对象上的函数. super.prop和super[expr]表达式在类和对象字面量任何方法定义中都是有效的. 语法 super([arguments]); / ...

  9. es6对象的扩展

    对象(object)是 JavaScript 最重要的数据结构之一. object 在es6中新增了很多便利的方法 在es6中允许直接写入变量和方法的名称直接作为对象的属性 let x =1 ,y=2 ...

随机推荐

  1. MySQL系列(一)--基础知识(转载)

    安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...

  2. Django项目:CRM(客户关系管理系统)--51--42PerfectCRM实现AJAX全局账号注册

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  3. H5C3--文本阴影text-shadow

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. js实现五子棋人机对战源码

    indexhtml <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. express route的写法

    1. 首先是最基本的用法 app.get("/",function(req,res){ res.send("hello world"); }); 2. 加个路径 ...

  6. DLX

    #include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...

  7. 在vscode中使用字体Cascadia Code

    下载字体 下载地址:github:https://github.com/microsoft/cascadia-code/releases 安装字体(windows10) 设置 > 个性化 > ...

  8. OSI层次关系

    一.OSI参考模型         今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型. 1.OSI的来源         OSI(Open System Interconnect),即开 ...

  9. UE4物理模块(三)---碰撞查询(下)SAP/MBP/BVH算法简介

    在上一文中介绍了碰撞查询的配置方法: Jerry:UE4物理模块(三)---碰撞查询(上)​zhuanlan.zhihu.com 本篇介绍下UE4的各种零大小的射线检测,以及非零大小(带体积)的射线检 ...

  10. Oracle查询表里的重复数据方法

    select id from group by id having count(*) > 1 按照id分组并计数,某个id号那一组的数量超过1条则认为重复. 如何查询重复的数据 select 字 ...