在IE 8、9和10上,文档是哪个类的实例
On IE 8, 9, and 10, is document an instance of which class?
在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
您似乎在问一个永恒的问题,"为什么所有浏览器都不以相同的方式实现主机对象?"。
要回答您关于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"
相关文章:
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 谷歌文档表面引擎
- 来自文档或下一个静态父级的事件委派
- 如何将childNodes用于XML文档
- 文档就绪提供了错误的选择器高度
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- BrowserId登录请求在文档加载时被调用
- 如何通过JS在不干扰其标记的情况下更改HTML文档中字符串的所有实例
- 如何在猫鼬.js子文档数组中定义实例方法
- 窗口、文档、数学、未定义作为类实例化的参数传递
- 在IE 8、9和10上,文档是哪个类的实例
- 只获取整个文档中的下一个实例
- 猫鼬鉴别器,实例化文档
- 是否有可能在html文档中的新标签中实例化html/js模板?
- 美元(文档).ready + setInterval =多个实例正在运行
- 在实例方法中执行$inc,获取更新的文档