JavaScript中的本地对象、内置对象和宿主对象

来源:互联网 发布:unity3d 画圆圈 编辑:程序博客网 时间:2024/05/17 03:17

       初学JavaScript的时候总是分不清什么是本地对象、内置对象和宿主对象,现在写一篇博客来记录一下。

一、本地对象

       ECMA-262把本地对象(native object)定义为:独立于宿主环境的ECMAScript实现的对象。
       这里简单说一下JavaScript的应用环境,JavaScript的应用环境由宿主环境和运行期环境构成。宿主环境主要是指外壳程序(shell)和Web浏览器等,运行期环境由JavaScript引擎内建的。

下面是在51CTO上找到的一张图:
JavaScript环境

现在来看一下本地对象有哪些:
       Object、Function、Array、String、Number、Date、RegExp、Boolean、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
       由此得出,JS的本地对象就是ECMA-262中定义的类(引用类型)。

二、内置对象

       ECMA-262把内置对象定义为:由ECMAScript提供实现的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。
       这意味着内置对象都是已经实例化好的,不需要我们再进行实例化了,这里我们首先会想到的就是Math对象。
       ECMA-262定义的内置对象只有两个:Global和Math。(本地对象和内置对象都是独立于宿主对象,根据定义可以看出来内置对象也是本地对象,在JS中所有的内置对象都是本地对象)。

       Math对象是我们经常用到的,但是Global就比较少见了。其实我们经常用到Global对象,只是没有用Global这个名字。

       Global对象是一个比较特殊的对象,它是一个全局对象,在程序中只有一个,它的存在伴随着整个程序的生命周期,全局对象不能通过名字来访问,但是它有一个window属性,这个属性指向它本身。
       大家也要清楚,在ECMAScript中不存在独立的函数,所有的函数都应该是某个对象的方法。类似于isNaN()、parseInt()、parseFloat()等方法都是Global对象的方法。
关于Global对象的属性和方法,参考JavaScript全局对象参考手册。

三、宿主对象

       宿主对象:由ECMAScript实现的宿主环境提供的对象。
       可能这样不是很好理解,上面已经说过了宿主环境包括Web浏览器,所以我们可以这样理解,浏览器提供的对象都是宿主对象。
       也可以这样理解,因为本地对象是非宿主环境的对象,那么非本地对象就是宿主对象,即所有的BOM对象和DOM对象都是宿主对象。
       那么还有一种对象,那就是我们自己定义的对象,也是宿主对象。

       最简单的理解:ECMAScript官方未定义的对象都属于宿主对象。

四、总结

官方的定义太绕口,还不好理解。说的简单点:
       本地对象就是ECMAScript中定义好的对象,如StringDate等,内置对象是本地对象中比较特殊的一种,它不用实例化,包括GlobalMath,宿主对象就是BOM、DOM和自己定义的对象。

1 0