es6 super关键字的理解与应用实例分析


Posted in Javascript onFebruary 15, 2020

本文实例讲述了es6 super关键字的理解与应用。分享给大家供大家参考,具体如下:

前面介绍了static关键字,class类还有另外一个关键字super

super不仅仅是一个关键字,还可以作为函数和对象。

函数:在子类继承父类中,super作为函数调用,只能写在子类的构造函数(constructor)里面,super代表的是父类的构造函数,

难点理解

但是执行过时supre()代表的是子类,super()里面的this指向子类的实例对象this。

class A {
 constructor() {
  console.log(new.target.name);
 }
}
class B extends A {
 constructor() {
  super();//这里的super相当于A类的constructor构造函数,会执行A的constructor,但是此时的this指
      //向的是B,所以打印出B
      //换一种方法理解是:在执行super时,A把constructor方法给了B,此时B有了A的功能,但是执
      //行的是B的内容,也就是es5的A.prototype.constructor.call(this)。
 }
}
new A() // A
new B() // B

对象:

这里重点理解下对象,概念相对抽象

super作为对象使用时,分为在普通方法中使用和在静态方法中使用

在普通方法找中使用:super指向父类的原型,即A.prototype,可以访问到原型上的方法和属性

逻辑抽象一:

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

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

super.print()虽然调用的是A.prototype.print(),但是A.prototype.print()内部的this指向子类B的实例

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

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery Ajax使用 全解析
Dec 15 Javascript
浅谈JavaScript函数参数的可修改性问题
Dec 05 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
JavaScript登录记住密码操作(超简单代码)
Mar 22 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
基于React+Redux的SSR实现方法
Jul 03 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
vue数据更新UI不刷新显示的解决办法
Aug 06 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 #Javascript
Vue父子传递实例讲解
Feb 14 #Javascript
Javascript操作select控件代码实例
Feb 14 #Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 #Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 #Javascript
node事件循环和process模块实例分析
Feb 14 #Javascript
vue+springboot图片上传和显示的示例代码
Feb 14 #Javascript
You might like
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
JS画线(实例代码)
2013/11/20 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
解决django前后端分离csrf验证的问题
2019/02/03 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
会计专业毕业生自我评价
2013/09/25 职场文书
应付会计岗位职责
2013/12/12 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
电子商务自荐书范文
2014/01/04 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
高中政治教学反思
2016/02/23 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL