看透JavaScript:原理、方法与实践
上QQ阅读APP看书,第一时间看更新

第9章 类

9.1 新类型class

ES2015中最大的改变应该就是启用了class关键字,即类的概念。注意,ES本身是基于对象的语言,虽然启用了类的概念,但是依然不是基于类的语言而是基于对象的语言,这一点在ES2015标准中有明确的说明。

    Even though ECMAScript includes syntax for class definitions, ECMAScript objects
    are not fundamentally class-based such as those in C++, Smalltalk, or Java.

从这里可以看出ES并不是基于类的语言,另外,ES2015中也明确指出了ES是基于对象的语言。

    ECMAScript is object-based: basic language and host facilities are provided
by objects, and an ECMAScript program is a cluster of communicating objects. In
ECMAScript, an object is a collection of zero or more properties.

因此,虽然ES2015中启用了class的概念,但是ES的本质并没有发生变化,依然是基于对象的语言而不是基于类的语言,使用class主要是为了方便操作。虽然,对于class所做的事情使用原先的闭包和prototype等组合也可以完成,但是那样要比直接使用class操作麻烦很多,看起来也不够清晰,并且直接使用class时采用的是底层语言(例如c、c++)的开发功能,效率更高,因此在浏览器支持的情况下应该尽量使用内置的class。

基于对象的语言和基于类的语言存在本质区别,例如在基于对象的语言中创建出来的实例对象可以自己直接添加删除属性,也可以添加、删除或者修改已有的方法属性,这在基于类的语言中是不可以的。