13、Javascript——对象

1、对象+类+实例是什么 

 

(1)对象

  ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。严格来说,这意味着对象是无特定顺序的值的数组。

  尽管 ECMAScript 如此定义对象,但它更通用的定义是基于代码的名词(人、地点或事物)的表示。

(2)类

  每个对象都由类定义,可以把看做对象的配方类不仅要定义对象的接口(interface)(开发者访问的属性和方法),还要定义对象的内部工作(使属性和方法发挥作用的代码)。编译器和解释程序都根据类的说明构建对象。类是在对象之上的抽象,对象则是类的具体化,是类的实例。

  类也叫做引用类型,其实在 ECMAScript 中,我们不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。

(3)实例

  程序使用类创建对象时,生成的对象叫作类的实例(instance)。对类生成的对象的个数的唯一限制来自于运行代码的机器的物理内存。每个实例的行为相同,但实例处理一组独立的数据。由类创建对象实例的过程叫做实例化(instantiation)。

  其实,ECMAScript 并没有正式的类。相反,ECMA-262 把对象定义描述为对象的配方。这是 ECMAScript 逻辑上的一种折中方案,因为对象定义实际上是对象自身。即使类并不真正存在,我们也把对象定义叫做,因为大多数开发者对此术语更熟悉,而且从功能上说,两者是等价的。

 2、对象的分类

  在 ECMAScript 中,所有对象并非同等创建的。

  一般来说,可以创建并使用的对象有三种:本地对象、内置对象和宿主对象。

(1)本地对象(native object)

  本地对象定义为:“独立于宿主环境的 ECMAScript 实现提供的对象”。对于ECMAScript来说,宿主环境就是操作系统和浏览器了。

  本地对象就是ECMA-262定义的类(引用类型),在使用时,需要创建实例,也就是要new。包括:

  Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、

TypeError、URIError

(2)内置对象(built-in object)

  内置对象定义为:“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”,也就是说开发者不必明确实例化内置对象,它已被实例化了,直接调用就可以了,也就是不要new。内置对象也属于本地对象。

  ECMAScript只定义了两个内置对象,也就是Global对象和Math对象。

  Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在!在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。而且Global对象的方法还不止这些。有关Global对象的具体方法和属性请看这里:JavaScript 全局对象参考手册

注意:

  1、有的地方把本地对象叫“内置对象”,内置对象叫“单体内置对象(Singleton Built-in Objects)”,意思差不多,这两者都是由ECMAScript本身实现提供的;

  2、内置对象是在引擎初始化阶段就被创建好的对象,是本地对象的一个子集,而本地对象除此之外还包括了一些在运行过程中动态创建的对象。

(3)宿主对象(host object)

  ECMAScript中的“宿主”就是我们网页的运行环境,即“操作系统”和“浏览器”。所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。所有 BOM 和 DOM 对象都是宿主对象。

  其实,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是我们通过ECMAScript程序创建的对象。

总结:

  那些官方定义好了的对象就叫本地对象。内置对象是本地对象的一种,其只包含Global对象和Math对象。而宿主对象则是那些官方未定义,我们自己构建的对象加上DOM和BOM对象。

posted @ 2016-08-24 20:33  cjlalala  阅读(156)  评论(0编辑  收藏  举报