javascript是一门编程语言,运行的环境是虚拟机(chrome是v8,别的浏览器也有),这个虚拟机在标准内称作javascript的运行时,这个运行时本身就是javascript的宿主环境了,不过在浏览器端,也把浏览器称作它的宿主环境(虚拟机寄宿在浏览器内)。
创新互联公司专业为企业提供八步网站建设、八步做网站、八步网站设计、八步网站制作等企业网站建设、网页设计与制作、八步企业网站模板建站服务,十载八步做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
本地对象为array obj regexp等可以new实例化
内置对象为gload Math 等不可以实例化的
宿主为浏览器自带的document,window 等
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。\x0d\x0a看定义有些不清楚,因为还未了解何为“宿主环境”的时候就引用了“宿主环境”这个概念,着实让人有些发晕。\x0d\x0a不过,根据我强悍的文学功底,“宿主”一般是指寄生的生物选择的寄生体,这让我想起了“火影”里的“白”。简单说,就是用户的机器环境,包括操作系统和浏览器。\x0d\x0a再来看一下,“本地对象”包含哪些内容:\x0d\x0aObject、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError\x0d\x0a由此可以看出,简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。\x0d\x0a内置对象\x0d\x0aECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。\x0d\x0a同样是“独立于宿主环境”。根据定义我们似乎很难分清“内置对象”与“本地对象”的区别。而ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。\x0d\x0a如此就可以理解了。内置对象是本地对象的一种。而其包含的两种对象中,Math对象我们经常用到,可这个Global对象是啥东西呢?\x0d\x0aGlobal对象是ECMAScript中最特别的对象,因为实际上它根本不存在,有点玩人的意思。大家要清楚,在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。\x0d\x0a类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。而且Global对象的方法还不止这些。有关Global对象的具体方法和属性,感兴趣的同学可以看一下这里:JavaScript 全局对象参考手册\x0d\x0a宿主对象\x0d\x0a何为“宿主对象”?主要在这个“宿主”的概念上,前面我已经介绍了“火影”,介绍了“白”。而ECMAScript中的“宿主”当然就是我们网页的运行环境,即“操作系统”和“浏览器”。\x0d\x0a所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。\x0d\x0a所有的BOM和DOM对象都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript程序创建的对象。\x0d\x0avar oPerson =new Object;\x0d\x0a\x0d\x0aoPerson.name='simaopig';\x0d\x0a\x0d\x0aoPerson.age='26';\x0d\x0a这里我自己定义的对象oPerson就是宿主对象。因为ECMAScript中未定义此对象,而此对象又只存在于我所运行的页面中。其貌似听起来是一个哲学命题。很奇怪我这款主题居然没有del的样式,残念。