在IE 8,9和10上,文档是哪个类的实例?

时间:2013-08-18 13:37:36

标签: javascript dom

在Chrome和Firefox的控制台上,我可以

Object.getPrototypeOf(document) === HTMLDocument.prototype

并获得true,这意味着documentHTMLDocument类的实例。但是在IE 8,9或10上,我会收到HTMLDocument is undefined的错误。

所以在IE 8,9和10中,document是哪个类的实例?

(在IE 11预览版中,它有效......有点奇怪,IE 10,如此现代,没有定义HTMLDocument的标准。

旁注:我发现在IE上没有遵循的模式有些奇怪:

Object.getPrototypeOf(document)  // => [object DocumentPrototype] { ... }

Object.getPrototypeOf(document) === Document.prototype  // => false

但是

Object.getPrototypeOf(document.body)  // => [object HTMLBodyElementPrototype] { ... }

Object.getPrototypeOf(document.body) === HTMLBodyElement.prototype  // => true

1 个答案:

答案 0 :(得分:0)

您似乎在问永恒的问题,“为什么并非所有浏览器都以相同的方式实现主机对象?”。

要回答有关document的问题,请查看document.constructor

Object.getPrototypeOf(document) === document.constructor.prototype; // true

那么,IE中的document.constructor是什么?

document.constructor === Document; // true in IE 10, 9
// hence
Object.getPrototypeOf(document) === Document.prototype; // true in IE 10, 9

您会注意到IE8不支持Object.getPrototypeOfDocument,但它确实有HTMLDocument

进一步注意,所有主要浏览器(IE8除外)

document instanceof Document; // true

因此,您可以对所有浏览器使用Document.prototype,但我不会建议它,因为您可能会破坏其他代码/向前兼容性

Document.prototype.foo = 'bar';
document.foo; // "bar"