Skip to content

Class是怎么实现的

🕒 Published at:

class本质上来说,是JS类实现的一个语法糖,很多行为和ES5 使用function关键字声明一个类是一致的。ES5使用function关键字作为构造函数的时候,主要是利用function身上的prototype属性来实现继承的,而通过class关键字声明一个类也是通过prototype属性来实现继承的,使用class关键字声明一个类会让原型的写法更加清晰,更符合面向对象编程语言的风格。

一些相同的地方

  1. 都可以使用extends关键字实现继承,都可以继承静态方法

但也有一些不同的地方

使用class和function关键字声明类的不同

  1. class声明的类必须使用new,否则会报错。
  2. class内部定义的原型方法是不可枚举的,而使用function关键字定义的原型方法是可枚举的。所谓可枚举就是可以通过for in循环、Object.keys()等方法可以遍历出来。
  3. class内部默认是严格模式
  4. class不存在变量提升