4

根据ECMA-262,原生对象

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

内置对象定义为

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

附注

本规范中定义了标准内置对象,ECMAScript 实现可以指定和定义其他对象。 每个内置对象都是原生对象。

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

我错过了什么?

4

3 回答 3

6

它们是“原生的”,因为它们带有 ECMAScript实现。应用程序中的宿主环境,通常由 ECMAScript 实现和其他几个协同工作的接口组成。例如,

  • Web 浏览器——由 ECMAScript 实现、DOM 接口、渲染引擎、UI 等组成的宿主环境。
  • Windows Script Host — 由 ECMAScript 实现、VBScript 实现等组成的宿主环境。
  • Node.js — 由 ECMAScript 实现 (V8)、HTTP 接口等组成的宿主环境。

“内置”对象需要Objector继承Function,而宿主对象(宿主环境提供的对象,但不一定在执行开始时存在)不需要但可能(有时会)。

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

  • Object(), Array(),Date()
  • Math, JSON, 全局对象。

ECMA-262 未定义本机内置对象示例

宿主对象示例

  • DOM 对象,document以及window
  • console
于 2011-11-08T15:40:18.990 回答
2

本机对象的语义完全由 ECMA-262 定义。对象本身可能不是。

所以我们有三个层次的对象:

  1. 标准内置对象:定义 ECMA-262,并遵循 ECMA-262 语义。示例:Object
  2. 其他内置对象:未在 ECMA-262 中定义,但遵循 ECMA-262 语义。示例:setTimeout
  3. 宿主对象:不遵循 ECMA-262 语义;它们可以有任何类型的奇怪行为,并以奇怪和意想不到的方式与 EMCA-262 内置对象交互(例如谎报各种内部属性)。示例:NodeList
于 2011-11-08T15:29:10.740 回答
0

的定义是 Like对象native object的相对术语,它是一个宿主对象,Ecma262 没有记录它来告诉浏览器如何实现它。 而 Ecma262 只是一个指定语言功能的项目。ECMAScript 实现实际上是浏览器的业务。这意味着实现符合规范,我们可以这样说,尽管它们的工作方式并不完全相同。host object
window.console
object typebuilt-in object

于 2011-11-08T15:42:40.700 回答