在Chrome和Firefox的控制台上,我可以
Object.getPrototypeOf(document) === HTMLDocument.prototype
并获得true
,这意味着document
是HTMLDocument
类的实例。但是在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
答案 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.getPrototypeOf
或Document
,但它确实有HTMLDocument
进一步注意,所有主要浏览器(IE8除外)
document instanceof Document; // true
因此,您可以对所有浏览器使用Document.prototype
,但我不会建议它,因为您可能会破坏其他代码/向前兼容性
Document.prototype.foo = 'bar';
document.foo; // "bar"