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 (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
jquery鼠标停止移动事件
Dec 21 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
JavaScript设计模式经典之工厂模式
Feb 24 Javascript
javascript弹出带文字信息的提示框效果
Jul 19 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
JS中利用FileReader实现上传图片前本地预览功能
Mar 02 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
vue 需求 data中的数据之间的调用操作
Aug 05 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
PHP 的 __FILE__ 常量
2007/01/15 PHP
php header功能的使用
2013/10/28 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
JSON相关知识汇总
2015/07/03 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python基础教程之udp端口扫描
2014/02/10 Python
Python的装饰器用法学习笔记
2016/06/24 Python
python机器学习之决策树分类详解
2017/12/20 Python
python利用微信公众号实现报警功能
2018/06/10 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
2014全国两会大学生学习心得体会
2014/03/10 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
党员查摆剖析材料
2014/10/10 职场文书
新党章的学习心得体会
2014/11/07 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
客户答谢会致辞
2015/07/30 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js