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

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

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

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

# 5、必须使用new来调用class

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

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

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

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

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

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

var sub = new Sub();

Sub.__proto__ === Function.prototype;//true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

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

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

Last Updated: 5/22/2024, 2:56:36 PM