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 年月日联动实现核心代码
Dec 21 Javascript
javascript与CSS复习(二)
Jun 29 Javascript
各浏览器对click方法的支持差异小结
Jul 31 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
javascript实现存储hmtl字符串示例
Apr 25 Javascript
一个支付页面DEMO附截图
Jul 22 Javascript
AngularJS 文件上传控件 ng-file-upload详解
Jan 13 Javascript
React-router v4 路由配置方法小结
Aug 08 Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 Javascript
js实现简单选项卡制作
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
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
python读取excel表格生成erlang数据
2017/08/26 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python如何处理程序无法打开
2020/06/16 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
详解python中的异常和文件读写
2021/01/03 Python
简历中个人自我评价范文
2013/12/26 职场文书
汽车专业人才自我鉴定范文
2013/12/29 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
如何利用js在两个html窗口间通信
2021/04/27 Javascript