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 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 Javascript
jquery zTree异步加载简单实例分享
Feb 05 Javascript
js单例模式详解实例
Nov 21 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
Oct 10 Javascript
js仿3366小游戏选字游戏
Apr 14 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
简单的vue-resourse获取json并应用到模板示例
Feb 10 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 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
计数器详细设计
2006/10/09 PHP
PHP中文乱码解决方案
2015/03/05 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
python基础练习之几个简单的游戏
2017/11/10 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
商务英语应届生自我鉴定
2013/12/08 职场文书
投资协议书范本
2014/04/21 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
护士自我推荐信范文
2015/03/24 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android