微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

寄生组合继承和es6 class继承

一、区别

ES5 的继承,实质是先创造子类的实例对象,然后将再将父类方法添加到 this 上。 ES6 的继承,先创造父类的实例对象(所以必须先调用 super 方法,然后再用子类的构造函数修改 this

二、代码实现

 1 function Super(foo) {
 2   this.foo = foo;
 3 }
 4 Super.prototype.printFoo = function () {
 5   console.log(this.foo);
 6 };
 7 function Sub(bar) {
 8   this.bar = bar;
 9   // 调用父类的构造函数
10   Super.call(this);
11 }
12 // 将子类是原型绑定在父类原型的复制对象上,之后修改子类原型就不会影响父类原型
13 Sub.prototype = Object.create(Super.prototype);
14 // 让子类原型的构造函数指向子类构造函数
15 Sub.prototype.constructor = Sub;
 1 class Super {
 2   constructor(foo) {
 3     this.foo = foo;
 4   }
 5   printFoo() {
 6     console.log(this.foo);
 7   }
 8 }
 9 class Sub extends Super {
10   constructor(foo, bar) {
11     Super(foo);//注意子类必须要有super()函数
12     this.bar = bar;
13   }
14 }

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐