什么是ECMAScript"本机对象"?

P.B*_*key 4 javascript ecmascript-5

根据ECMA-262的原生物体

ECMAScript实现中的对象,其语义完全由此规范定义,而不是由主机环境定义

内置对象定义为

由ECMAScript实现提供的对象,独立于主机环境,在ECMAScript程序执行开始时出现.

附注意

标准内置对象在本规范中定义,ECMAScript实现可以指定和定义其他对象. 每个内置对象都是本机对象.

如果ECMA-262规范完全定义了本机对象而不是主机环境,并且ECMAScript实现可以指定和定义新的内置对象,那么这些新的内置对象如果不是本机对象又是怎么回事?完全由ECMA-262规范定义?

我错过了什么?

And*_*y E 6

它们是"原生的",因为它们带有ECMAScript 实现.主机环境通常是由ECMAScript实现和其他几个协同工作的应用程序组成的应用程序.例如,

  • Web浏览器 - 由ECMAScript实现,DOM接口,渲染引擎,UI等组成的主机环境.
  • Windows脚本宿主 - 由ECMAScript实现,VBScript实现等组成的主机环境.
  • Node.js - 由ECMAScript实现(V8),HTTP接口等组成的主机环境.

"内置"对象需要继承Object或者Function,而主机对象 - 主机环境提供的对象,但不一定在执行开始时存在 - 不是必需的,但可能(有时也可以).

ECMA-262定义的本机对象示例

  • Object(),Array(),Date()
  • Math,JSON全球对象.

天然的,内置的对象的示例不是由ECMA-262中定义

主机对象的示例

  • DOM对象documentwindow
  • console