Skip to content

1、class声明会提升,但不会初始化值,类似于let、const声明变量一样。 ​

2、class声明内部会启用严格模式。 ​

3、class的所有方法(包括静态和实例方法)都是不可枚举的。 ​

4、class的所有方法(包括静态和实例方法)都没有原型对象prototype,不能用new来调用。 ​

5、必须使用new来调用class。 ​

6、class内部无法重写类名。 ​

7、ES6子类可以直接通过__proto__寻址到父类。 ​

js
//ES6
class Super {};
class Sub extends Super {};

const sub = new Sub();
sub.__proto__ === Sub.prototype;//true
Sub.__proto__ === Super;//true
Sub.prototype.__proto__===Super.prototype;// true

//ES5
function Super() {};
function Sub() {};

Sub.prototype = new Super();
Sub.prototype.constructor = Sub;

var sub = new Sub();

Sub.__proto__ === Function.prototype;//true

8、ES6和ES5子类this生成顺序不同。ES5的继承是先生成子类实例,再调用父类的构造函数修饰子类实例;ES6的继承是先生成父类实例,再调用子类的构造函数修饰父类实例。 ​

9、ES5的继承是通过call或者apply回调方法调用父类。ES6是通过super()来调用父类。 ​

记录 · 实践 · 分享