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中使用构造函数实现继承的代码
Aug 12 Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
JS针对Array的各种操作汇总
Nov 29 Javascript
js for循环倒序输出数组元素的实例
Mar 01 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
详解VUE单页应用骨架屏方案
Jan 17 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 03 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 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 字符转义 注意事项
2009/05/27 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
Vue组件开发初探
2017/02/14 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
python的即时标记项目练习笔记
2014/09/18 Python
详解Swift中属性的声明与作用
2016/06/30 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
Python多线程正确用法实例解析
2020/05/30 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
python包的导入方式总结
2021/03/02 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
不假外出检讨书
2014/01/27 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL