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 相关文章推荐
Javascript 写的简单进度条控件
Jan 22 Javascript
如何使用HTML5地理位置定位功能
Apr 27 Javascript
javascript中的3种继承实现方法
Jan 27 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
vue配置请求本地json数据的方法
Apr 11 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
python虚拟环境 virtualenv的简单使用
Jan 21 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 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
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
JavaScript的变量作用域深入理解
2009/10/25 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
selenium+python实现自动登录脚本
2018/04/22 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python简单贪吃蛇开发
2019/01/28 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
优质的学校老师推荐信
2013/10/28 职场文书
施工资料员的岗位职责
2013/12/22 职场文书
小学生获奖感言范文
2014/02/02 职场文书
青年志愿者活动总结
2014/04/26 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
Python Parser的用法
2021/05/12 Python