程序员在旅途

用这生命中的每一秒,给自己一个不后悔的未来!

0%

JavaScript语言中对象的理解

一、对象分类

  在JavaScript语言中,可用于创建和使用的对象共有三类,分别为:本地对象、内置对象和宿主对象。

二、本地对象(非静态对象,需要手动创建(new)才能使用):

  ECMA-262把本地对象(native object)定义为“独立于宿主环境的、ECMAScript实现的对象”。本地对象包括如下内容:Object、Function、String、Array、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。可以把ECMA-262定义的本地对象理解为类(引用类型)。这些对象的定义由语言机制本身来实现,但ECMA-262并没有对这类对象进行实例化,因此,这类对象在使用时,需要使用其构造函数进行实例化,如:var s = new String();
  本地对象在控制台环境下的表现如下:
本地对象

三、内置对象(静态。可直接使用,不需要手动创建)

  ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。全局对象(Global)是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。我们通常使用的isNaN()、parseInt()和parseFloat()等方法并没有像普通方法那样,显式的使用 对象.方法() 这种形式去调用,因为,这些方法都是全局对象(Global)对应的方法,全局对象不是任何对象的属性(通过原型链模型可知一般对象都是其他对象的属性),所以它没有名称,因此,调用这些函数,不需要对象名,这些函数又称为全局函数,Global的相关属性成为全局属性(JavaScript的全局函数和全局属性列表
  内置(Build-in)对象与本地(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集;而后者包括了一些在运行过程中动态创建的对象。

四、宿主对象(这个看宿主环境的情况了,有的需要自己手动创建(new),有的不需要

  宿主是JavaScript运行时所处的环境,环境中预设了一些对象,称为宿主对象所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。这里把浏览器作为宿主环境,简单的介绍一下此环境下的一些对象。在浏览器环境下,经常听到的就是DOM和BOM模型了(关于这两个模型的认识与理解,后面会继续发博客介绍),所有的DOM和BOM下的对象都是宿主对象
dom (文档对象模型)示意图:
dom文档对象模型
  可以把图中的每个元素都看成是一个对象,这些对象普遍具有一些属性,比如 position、style 、id、class等属性。其中,某些属性自己本身也是对象,比如style;他也有自己的属性,比如width、height、background等。当我们想为某一元素(例如id为 test 的div)设置height时,可以这么做:document.getElementById(“test”).style.height =’32px’; 但是,我们不可以直接这样:document.getElementById(“test”).height =’32px’; 因为height不是div的直接属性。
DOM下的对象举例:
  1,Document对象代表整个 HTML 文档,用来访问页面中的所有元素。
  2,Body代表HTML 文档中的 元素
  像Document这样的对象,在文档载入浏览器的之后,很多浏览器就会对其实例化,new出来一个对象,用户不需要自己手动实现,比如浏览器默认实现的Document的一个实例化对象:document对象。其实,讲Document对象严格来说应该是不准确的,准确应该是,Document是一个构造函数名(由宿主环境实现其定义),它用来构造document对象
DOM对象
如果您有更好的理解或者发现文章的不足之处(错误之处),欢迎留言交流,批评指正。谢谢呢!