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 相关文章推荐
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
Sep 10 Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 Javascript
jquery 利用show和hidden实现级联菜单示例代码
Aug 09 Javascript
jQuery实现移动 和 渐变特效的点击事件
Feb 26 Javascript
Bootstrap树形控件使用方法详解
Jan 27 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
Jun 21 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
响应式框架Bootstrap栅格系统的实例
Dec 19 Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
vant 自定义 van-dropdown-item的用法
Aug 05 Javascript
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
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的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
《母鸡》教学反思
2014/02/25 职场文书
工作所在部门证明
2014/09/21 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
永不妥协观后感
2015/06/10 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
初二英语教学反思
2016/02/15 职场文书
同学聚会开幕词
2019/04/02 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang