ES6 Class继承中super在不同场景中的用法
来源:互联网 发布:手机诊断软件超级兔子 编辑:程序博客网 时间:2024/06/15 22:07
super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。
第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。
class A {}class B extends A { constructor() { super(); }}
上面代码中,子类B的构造函数之中的super(),代表调用父类的构造函数。这是必须的,否则 JavaScript 引擎会报错。
注意,super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B,因此super()在这里相当于A.prototype.constructor.call(this)。
第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
例1:普通方法
class A { p() { return 2; }}class B extends A { constructor() { super(); console.log(super.p()); // 2 }}let b = new B();
上面代码中,子类B当中的super.p(),就是将super当作一个对象使用。这时,super在普通方法之中,指向A.prototype,所以super.p()就相当于A.prototype.p()。
这里需要注意,由于super指向父类的原型对象,所以定义在父类实例上的方法或属性,是无法通过super调用的。
如果super作为对象,用在静态方法之中,这时super将指向父类,而不是父类的原型对象。
例2:静态方法
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 1var child = new Child();child.myMethod(2); // instance 2
–参考自阮一峰《ES6》
阅读全文
0 0
- ES6 Class继承中super在不同场景中的用法
- ES6 Class 中的 super 关键字
- React在ES6中的用法
- 关于ES5中的prototype与ES6中class继承的比较
- Python 中的继承之Super用法
- 【ES6】class的继承
- promise在es6与es7中的不同
- java继承中super关键字的用法
- Python中多继承与super()用法
- ES6 Class的用法
- 在继承中关于super的详解
- es5和es6中封装继承的不同
- FeignClient 在不同场景中的应用
- es6中的class类
- es6中的class
- ES6中的继承
- ES6中super的使用
- JAVA中的继承问题和super的用法
- 根据传入的时间,自动计算规则时间(如:包期时段的开始时间和结束时间)
- module.exports与exports的区别
- 中断响应流水灯控制程序
- 资料整理(目录)
- SparkMLlib---基于余弦相似度的用户相似计算
- ES6 Class继承中super在不同场景中的用法
- Oracle的Index,以及组合Index
- Tomcat优化详解
- 上传代码到GitLab
- Linux中利用子进程实现多个客户端和服务器端通信
- 数据结构
- django 在自己app下编写自定义sql
- Redis在windows下安装过程
- (1)关于ueditor运用的实践