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连接。
最后更新于
这有帮助吗?