ES5和ES6中继承的不同之处

ES5和ES6中继承的不同之处

1、JS中视没有继承的,不过可以通过构造函数或是原型等实现继承,ES5实现继承的方法——构造函数,当一个构造函数加上new的时候都做了些什么呢?
(1)生成一个空对象并将其作为this
(2)将空对象的proto指向构造函数的prototype
(3)运行该构造函数
(4)如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型

2、ES6中的constructor()和super()
(1)constructor()——构造方法:这是ES6对类(class)的默认方法,通过new命令生成对象实例时自动调用该方法,并且该方法是类中必须有的,如果没有显示定义,则会默认添加空的constructor()方法
(2)super()——继承:在class方法中,继承是使用 extends 关键字来实现的。子类 必须 在 constructor( )调用 super( )方法,否则新建实例时会报错。原因在于:子类是没有自己的 this 对象的,它只能继承自父类的 this 对象,然后对其进行加工,而super( )就是将父类中的this对象继承给子类的。没有 super,子类就得不到 this 对象。

总结:在ES5的继承中,先创建子类的实例对象this,然后再将父类的方法添加到this上( Parent.apply(this) )。而ES6采用的是先创建父类的实例this(故要先调用 super( )方法),完后再用子类的构造函数修改this。

3、super(props)------super()的区别:
(1)如果用到了constructor就必须写super(),是用来初始化this的,可以绑定事件到this上;
(2)如果在constructor中要使用this.props,就必须给super加参数:super(props);
(3)无论有没有constructor,在render中this.props都是可以使用的,这是React自动附带的;
(4)如果没用到constructor,是可以不写的,React会默认添加一个空的constructor。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、JS中是没有继承的,不过可以通过构造函数或是原型等实现继承,ES5实现继承的方法——构造函数,当一个构造函数加...
    小龙虾Julian阅读 612评论 0 1
  • 简介 Class可以通过extends关键字实现继承。 上面代码定义了一个ColorPoint类,该类通过exte...
    oWSQo阅读 683评论 0 1
  • class的基本用法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子: ...
    呼呼哥阅读 4,127评论 3 11
  • 基本语法 简介 JavaScript语言中,生成实例对象的传统方法是通过构造函数. ES6提供更接近传统语言的写法...
    JarvanZ阅读 885评论 0 0
  • 在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中...
    Daguo阅读 25,930评论 10 44