ES5 和 ES6 的区别

ES5 的继承

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

ES6 的继承

先创建父类实例 this 通过 class、extends、super 关键字定义子类,并改变 this 指向, super 本身是指向父类的构造函数但做函数调用后返回的是子类的实例, 实际上做了父类.prototype.constructor.call(this), 做对象调用时指向父类.prototype,从而实现继承。

//ES5
function Super() {}

function Sub() {}
Sub.prototype = new Super();
Sub.prototype.constructor = Sub;

var sub = new Sub();

Sub.prototype.constructor === Sub; // ② true
sub.constructor === Sub; // ④ true
sub.__proto__ === Sub.prototype; // ⑤ true
Sub.prototype.__proto__ == Super.prototype; // ⑦ true

区别于 ES5 的继承,ES6 的继承实现在于使用 super 关键字调用父类,反观 ES5 是通过 call 或者 apply 回调方法调用父类。

所以 ES6 和 ES5 的继承是一模一样的,只是多了 class 和 extends,ES6 的子类和父类,子类原型和父类原型,通过proto连接。

最后更新于

这有帮助吗?