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实现视频播放页面的关灯开灯效果
May 27 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
通过扫描二维码打开app的实现代码
Nov 10 Javascript
JS实现浏览器打印、打印预览示例
Feb 28 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
详解vee-validate的使用个人小结
Jun 07 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
微信小程序自动客服功能
Nov 02 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 Javascript
javascript实现贪吃蛇游戏(娱乐版)
Aug 17 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 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
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
PHP SOCKET编程详解
2015/05/22 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
jQuery的框架介绍
2016/05/11 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
express.js中间件说明详解
2019/03/19 Javascript
详解Python3中的Sequence type的使用
2015/08/01 Python
python 循环while和for in简单实例
2016/08/16 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
python找出完数的方法
2018/11/12 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
2014年感恩母亲演讲稿
2014/05/27 职场文书
团日活动总结怎么写
2014/06/25 职场文书
复活读书笔记
2015/06/29 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
SpringBoot生成License的实现示例
2021/06/16 Java/Android
MySQL创建管理RANGE分区
2022/04/13 MySQL
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers