# 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__ === 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

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

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

Last Updated: 6/11/2024, 9:51:11 AM