美文网首页
ES5和ES6中继承的不同之处

ES5和ES6中继承的不同之处

作者: 小龙虾Julian | 来源:发表于2018-06-26 09:58 被阅读0次
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。

相关文章

  • ES5和ES6中继承的不同之处

    ES5和ES6中继承的不同之处 1、JS中视没有继承的,不过可以通过构造函数或是原型等实现继承,ES5实现继承的方...

  • JavaScript的多态和封装

    在之前的文章中我们已经介绍了JavaScript的继承包含了ES5和ES6的版本。 ES5继承 传送门 ES6继承...

  • es5 es6静态方法、类、单例模式

    es5中的类和静态方法 es5继承 es6中的类 es6里面的继承 es6里面的静态方法 es6单例模式 转载:h...

  • ES5 和 ES6 继承比较:

    ES5构造函数和继承: ES6构造函数和继承:

  • ES5和ES6 实现继承方式

    在ES5 中:通过原型链实现继承的,常见的继承方式是组合继承和寄生组合继承;在ES6中:通过Class来继承 组合...

  • 构造函数

    es5 es6 继承

  • 第三篇 关于继承

    写在前面:在JavaScript中,继承有多种方式,本章将对比一些 ES5 中的继承方式和 ES6 中的 exte...

  • 用ES5和ES6实现继承

    ES5 prototype实现继承 ES6 写法

  • ES的类与继承

    ES5中的类与继承 构造函数继承,原型继承,组合式继承 静态方法,静态属性,实例方法,实例属性 ES6中的类与继承...

  • ES5和ES6中继承的不同之处

    1、JS中是没有继承的,不过可以通过构造函数或是原型等实现继承,ES5实现继承的方法——构造函数,当一个构造函数加...

网友评论

      本文标题:ES5和ES6中继承的不同之处

      本文链接:https://www.haomeiwen.com/subject/pnrpyftx.html