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 相关文章推荐
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
不提示直接关闭网页窗口的JS示例代码
Dec 17 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
JS 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
jquery删除ID为sNews的tr元素的内容
Apr 10 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
jQuery中map()方法用法实例
Jan 06 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
Apr 07 Javascript
Webpack 实现 Node.js 代码热替换
Oct 22 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
vue-cli初始化项目中使用less的方法
Aug 09 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中array_merge与array+array的区别
2013/06/21 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
python制作抖音代码舞
2019/04/07 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
机械系大学毕业生推荐信
2013/11/27 职场文书
初中生评语大全
2014/04/24 职场文书
大型活动组织方案
2014/05/10 职场文书
环保倡议书50字
2014/05/15 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
标准单位租车协议书
2014/09/23 职场文书
阿甘正传观后感
2015/06/01 职场文书
开国大典观后感
2015/06/04 职场文书
如何写观后感
2015/06/19 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android