在Web浏览器中,窗口对象是本机ECMAScript对象吗?

Šim*_*das 5 javascript browser

ECMAScript规范定义了"在控制进入任何执行上下文之前创建的唯一全局对象".此全局对象是ECMAScript的标准内置对象,因此是本机对象.

该规范还指出:

除了本规范中定义的属性外,全局对象还可能具有其他主机定义的属性.这可能包括一个属性,其值是全局对象本身; 例如,在HTML文档对象模型window中,全局对象的属性是全局对象本身.

因此,在Web浏览器中,该window对象只是ECMAScript全局对象的一个​​方便名称,因此该window对象是本机ECMAScript对象.

我得到了这个吗?

All*_*ock 5

这主要归结为成为"本机对象"或"主机对象"的真正含义的问题.ECMAScript规范提供了相当抽象的术语定义,并且有足够的空间对定义进行不同的解释.例如,在本机对象的定义中,实际上谈论的是什么词"语义".它只是原始对象语义(在[[propName]]内部属性指定的ES中)还是包含对象的应用程序级语义.DOM窗口对象当然具有可在ES规范中定义的可观察的应用程序级语义,因此如果考虑这些语义,则它不能是"本机对象".

如果你把它看作是实现语用学的问题,答案可能会简单得多.ES引擎实现者可能会认为在ES堆中分配并由ES垃圾收集器管理的任何对象都是"本机ES对象".通常认为"主机对象"存在于ES堆外部并且使用某种互操作性层(例如COM,XPCOM或V8嵌入API)访问的东西.根据实现,DOM窗口对象可能属于任一类别.这种区别可能与引擎实现者和主机提供者相关,而不是任何规范级别的区别.

在下一版ES规范中可能会有进一步的定义澄清.甚至有人建议消除"本机"和"主机"对象术语:http://wiki.ecmascript.org/doku.php?id = strawman :terminology .但是,目前尚不清楚这些定义是否确实具有非常实际的影响.