标准(HTML5和EcmaScript 5.1)对在浏览器中扩展主机对象有什么规定?
What does the standard (HTML5 and EcmaScript 5.1) say about extending host objects in the browser?
最近的标准对扩展宿主对象及其原型有什么规定?例如,扩展NodeList
与方法_forEach
或Document
与方法_my_query
正确定义?
我将看到任何我添加到Object.prototype
主机对象的标准?
相对于相关标准,真实的实现是如何表现的?
注意:我不是在问扩展宿主对象或它们的原型是否是个好主意(尽管Object.defineProperty
在枚举问题时使事情变得更容易)。
ECMAScript 5没有提到宿主对象的原型链。
在WebIDL中定义。
具体来说,看一下ECMAScript绑定部分,它说:
的[[Prototype]]内部属性本节中定义的对象是Object原型对象。
和this,来自以下部分:
每个ECMAScript全局环境([ECMA-262],章节10.2.3)必须每个初始对象都有自己独特的集合,之前创建的控件的任何ECMAScript执行上下文环境,但是在该环境的全局对象之后创建。给定全局中所有初始对象的[[Prototype]]s环境必须来自同一个全局环境
甚至有这样一个例子:
iframe.appendChild instanceof Function; // Evaluates to true
最后,接口原型对象部分说(强调我的):
给定接口a的命名属性对象必须有internal [[Prototype]]属性,其值如下:
如果A没有声明从另一个接口继承,则值A的内部[[Prototype]]属性是Array原型对象([ECMA-262],第15.4.4节)[ArrayClass], 或对象原型对象,否则([ECMA-262],第15.2.4节).
否则,A继承另一个接口。的值A的internal [[Prototype]]属性是接口原型对象
所以现在如果我们看一下DOM Level 3和Document接口,我们可以看到它继承自Node接口。Node接口不显式地继承其他任何东西,这意味着它继承自Object.prototype
。
这是理论:)
实际上,并不是所有的浏览器都遵循这个行为,尽管最近的大多数浏览器都遵循这个行为。
ECMASCRIPT5规范规定:
web服务器为服务器端提供不同的主机环境计算包括表示请求、客户端和文件;以及锁定和共享数据的机制。通过使用浏览器端与服务器端脚本结合在一起,就可以进行分发客户端和服务器之间的计算同时提供自定义基于web的应用程序的用户界面。
支持ECMAScript的每个Web浏览器和服务器都提供自己的主机环境,完成ECMAScript执行环境。
我不认为它说明了什么。这可以理解为一个实现可以符合规范并实现它想要的浏览器对象。这是过去的情况。将语言的强大功能应用于外部环境似乎是合乎逻辑的,我相信现在所有的"现代"浏览器都在这样做。
dom/html元素的原型链如下:HTMLElement > Element > Node > Object
在链中任何有意义的地方进行挂钩可能是最好的选择。
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 对象未在本地主机中定义(Javascript),但在生产中未定义
- 在 JavaScript 中更改主机对象的原型函数
- x.y和x['y']是否会导致主机对象的行为不同
- JavaScript:主机对象也是本机对象的示例是什么
- 是否有一种与环境无关的方法来检测Javascript主机对象?
- 标准(HTML5和EcmaScript 5.1)对在浏览器中扩展主机对象有什么规定?
- 从本地主机读取node.js中的请求对象
- 是否有一个JavaScript程序可以列出所有预定义的浏览器主机对象
- Golang Otto JS-将主机对象暴露给JavaScript
- PHP JSON对象将在本地主机上呈现,而不是从远程服务器呈现