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 相关文章推荐
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
js中escape对应的C#解码函数 UrlDecode
Dec 16 Javascript
javascript中match函数的用法小结
Feb 08 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
May 28 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
Mar 22 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 Javascript
关于js原型的面试题讲解
Sep 25 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
如何在AngularJs中调用第三方插件库
May 21 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
Nginx设置为Node.js的前端服务器方法总结
Mar 27 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 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预定义常量
2006/12/25 PHP
php实现源代码加密的方法
2015/07/11 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
javascript 闭包详解
2015/07/02 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
Angular排序实例详解
2017/06/28 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python字典的遍历3种方法详解
2019/08/10 Python
Python常用编译器原理及特点解析
2020/03/23 Python
使用Django清空数据库并重新生成
2020/04/03 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
求职简历自荐信
2013/10/20 职场文书
大四自我鉴定
2014/02/08 职场文书
教师自我反思材料
2014/02/14 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
二年级作文之动物作文
2019/11/13 职场文书
python 提取html文本的方法
2021/05/20 Python
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
Go语言基础函数基本用法及示例详解
2021/11/17 Golang