P K*_*P K 5 javascript dom prototype google-chrome prototype-chain
为什么我们在窗口的原型链中有2个类对象和对象?
window - > DOMWindow ---> Object ---> Object ---> null
任何人都可以给我一些关于这个设计的观点吗?
Follwing是chrome的输出.

首先:控制台中显示的是智能开发工具的结果:本例中显示了构造函数名称。DOMWindow当您明确使用, 时window.__proto__.toString(),[object Object]会显示三次。
为了回答你关于设计的问题,我引用了ES5 规范(重点是我的):
所有对象都有一个名为 的内部属性
[[Prototype]]。该属性的值为 null 或对象,用于实现继承。本机对象是否可以拥有宿主对象取决于其[[Prototype]]实现。每个[[Prototype]]链必须具有有限长度(即从任何对象开始,递归访问[[Prototype]]内部属性最终必须得到一个null值)。
null所以,你最终看到的结果并不奇怪。
预先的一些(技术)说明:
Object.getPrototypeOf( obj )返回[[Prototype]]对象的属性obj。[[Class]]对象的属性代表其内部类。可以使用 提取其名称Object.prototype.toString.call( obj )。桌子:
toString() result: [[Class]] # Additional notes
1. [object DOMWindow] global # The global object
2. [object Object] Object # [[Prototype]] of the Global object
3. [object Object] Object # [[Prototype]] of 2 (dummy?)
4. [object Object] Object # [[Prototype]] of 3 === Object.prototype
5. [object Null] Null # Object.prototype.__proto__ === null
Run Code Online (Sandbox Code Playgroud)
window在浏览器 JavaScript 中、global在Node.js中。[[Prototype]]和[[Class]]的属性global取决于实现。在 Chrome 中, 的实现DOMWindow类似于此 IDL中描述的实现。Global Scope Polluter类。Object。这解释了控制台中的__defineGetter[[Prototype]]的性质是Object.prototype,null见15.2.4节。获取[[Class]]属性的代码:
var w = window;
while (1) {
console.log(Object.prototype.toString.call(w));
if (w == null) break;
w = Object.getPrototypeOf(w);
}
Run Code Online (Sandbox Code Playgroud)DOMWindow.idl DOMWindowConstructor| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |