3.2 JavaScript的结构
JS的核心是对象,每个对象都可以包含0个或多个由名值对组成的属性。
对象的属性有两种类型:基础类型(直接量)和对象类型(另外还有一种特殊类型的属性,后面再给大家介绍)。基础类型的属性不可以再包含属性,而对象类型的属性还可以再包含自己的属性,此时该对象既是一个对象又是另外一个对象的属性。
JS中的对象又可以分为function和object两种类型(注意都是小写),这一点非常重要。理解了这一点就抓住了JS的核心,在学习完后面的内容之后大家应该会有更深刻的认识。对象和属性类型的结构如图3-9所示。
图3-9 对象和属性类型的结构
Java等面向对象语言中的对象是通过类来创建的,它们的类是一个树结构,有统一的根节点(例如Java中的Object),而JS中没有类的概念,更没有类的树结构。JS中的object类型对象是使用function类型对象创建的。JS中经常使用的String、Array和Date等对象其实都是function类型的对象,就连Object对象也是function类型的对象,而使用它们创建出来的对象就是object类型。可以在FireBug中使用typeof来查看,如图3-10所示。
图3-10 在FireBug中使用typeof来查看对象
多知道点
在FireBug中怎么调试代码
在FireBug的控制台选项卡中的最下面一行可以输入单行命令,按回车键后就会在当前页面的环境中执行,即可以操作当前页面所对应的对象。如果要执行多行命令,那么可以通过单击输入框右边的红色按钮切换到多行代码的模式。
在单行代码模式下控制台会自动输出返回值,在多行模式下,如果想输出多个结果,则需要使用console.log(msg)函数来实现。如果想清除控制台的内容,那么可以单击上方的“清除”按钮。
需要注意的是,执行了自己的代码之后可能会修改所在页面的对象,例如图3-10中的代码就定义了obj和date两个全局变量。如果想恢复原来的状态,只需要刷新浏览器就可以了。
JS中用来创建object类型对象的各种function对象之间并没有继承关系,但是创建出来的object类型的对象可以继承其他对象的属性。另外,由于一个对象可以作为另外一个对象的属性存在,因此对象之间还有另外一层包含关系。这些关系综合到一起就会非常复杂,我们现在也不需要全部理解,只要明白一个对象可以是另外一个对象的属性即可,在学完本书全部之后,这些内容就能全部理解清楚了。JS的本质就是一个大的对象,这个对象就是Global Object,它是由宿主环境(例如浏览器)创建出来的,在浏览器中就是window对象,其他的对象都是它的属性,或者属性的属性。