es5和es6的继承有哪些区别

这篇“es5和es6的继承有哪些区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es5和es6的继承有哪些区别”文章吧。

目前创新互联已为上千余家的企业提供了网站建设、域名、网页空间、成都网站托管、企业网站设计、织金网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

es5和es6继承的区别是:es5是先创建子类,实例化父类并添加到子类this中实现继承;而es6是先创建父类,实例化子集中通过调用super方法访问父类后,通过修改this实现继承。

本教程操作环境:windows10系统、ECMAScript 6.0版、Dell G3电脑。

es5和es6的继承有什么区别

ES5的继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上(Parent.apply(this)).

ES6的继承机制完全不同,实质上是先创建父类的实例对象this(所以必须先调用父类的super()方法),然后再用子类的构造函数修改this。

ES5的继承时通过原型或构造函数机制来实现。

ES6通过class关键字定义类,里面有构造方法,类之间通过extends关键字实现继承。子类必须在constructor方法中调用super方法,否则新建实例报错。因为子类没有自己的this对象,而是继承了父类的this对象,然后对其进行加工。如果不调用super方法,子类得不到this对象。

ES6中的继承

在传统JS中,生成对象是通过创建构造函数,然后定义生成对象

function parent(a,b){
    this.a = a;
    this.b = b;
}

然后通过prototype增加对应所需方法或属性

parent.prototype.methods = function(){
    return 'this is test methods';
}
parent.prototype.attr = 'this is test attr‘;

而ES6中引入了类的概念,也就是class。通过关键词class去定义对象。

class是个关键词,语言糖,这样能更清晰的读懂所创建的对象,

通过属性constructor来接收控制方法传入的参数,如果不写这个属性,默认是没有参数的

class parent{
    curstructor(a,b){
        this.a = a;
        this.b = b;
    }
}

ES6中的继承是基于class类之间继承的。通过关键词extends实现。

通过super实例化调用父类

class parent{
  constructor(a,b){
    this.a = a;
    this.b = b;
  }
  parentMethods(){
    return this.a + this.b
  }
}
class child extends parent{
  constructor(a,b,c){
    super(a,b);
    this.c = c;
  }
  childMethods(){
    return this.c + ',' + super.parentMethods()
  }
}
const point = new child(1,2,3);
alert(point.childMethods());

上面的代码,是一套简单的ES6父子类继承。

相信已经看出来了,虽明显的区别就是在于ES6中,激活父组件的是super方法,而不是新建实例化,也就是说,父类的实例对象是先创建出来的,调用后,再去修改子类的构造函数中的this完善原型对象。

以上就是关于“es5和es6的继承有哪些区别”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


分享标题:es5和es6的继承有哪些区别
网站URL:http://myzitong.com/article/ieghpo.html