首页
ES的本质
ES的本质
版权声明:本文为原创内容,转载请声明出处。
原文地址:http://www.excelib.com/article/151/show

学习方法

学生在前面跟大家说过,ES的难点是对象,而理解ES中对象的难点其实是对ES对象本身结构的理解。下面学生将以一种全新的视角带大家重新认识ES,这种视角可以让大家更好地掌握其本质。

ES是一种面向对象的语言,而且是一种纯对象语言,理解这一点是理解整个ES的关键。ES中的对象跟Java等面向对象语言中的对象并不一样,他们有着本质的区别,其他面向对象的语言都有类的概念,不过ES中虽然有对象但是并没有类(虽然ES2015中启用了class关键字但是跟其他语言中的类并不相同)。所以对于具备Java等面向对象开发语言基础的读者来说反而更不容易理解ES中的对象,在学习ES(或者JS)对象的时候把它当成一种新的事物来学习可能效果会更好

结构

ES的核心就是对象,每个对象都可以包含零个或多个由名值对组成的属性。

对象的属性有两种类型(另外还有一种特殊类型的属性,我们以后面再给大家介绍):基础类型(直接量)和对象类型,基础类型的属性不可以再包含属性了,而对象类型的属性还可以再包含自己的属性。

ES中的对象又可以分为functionobject两种类型(注意都是小写),这一点非常重要,理解了这一点就抓住了ES的核心,在学习完后面的内容之后大家应该会有更深刻的认识。对象的结构图1所示

图1


Java等面向对象的语言中的对象是通过类来创建的,他们的类是一个树结构,有统一的根节点(比如Java中的Object),而ES中没有类的概念,更没有类的树结构,ES中的object类型对象是使用function类型对象来创建出来的,我们经常使用的StringArrayDate等其实都是function类型的对象,就连Object对象也是function类型,而使用它们创建出来的对象就是object类型了,我们可以在FireBug中使用typeof来清楚地看出来这一点,下图2是学生在FireBug中的一张截图

2


ES中用来创建object类型对象的各种function对象之间并没有继承关系,但是他们创建出来的object类型对象可以继承其他对象的属性,另外由于一个对象可以作为另外一个对象的属性存在所以对象之间还有另外一层包含的关系,理解这一点是非常重要的。不过一下子真正将其理解并不容易,特别是生成关系function类型对象生成object类型对象)、包含关系和继承关系三种关系综合到一起后理解起来就更加复杂了。学生后面会逐步给大家详细的讲解,全部学完之后再返回来看就容易了。

我们前面多次说过,ES的本质就是对象,而所有对象的根对象是Global Object,他是由宿主环境(比如浏览器)创建出来的,在浏览器中就是window对象,其他的对象都是他的属性,或者属性的属性。