JavaScript中的Document和document有什么区别?

ser*_*0ne 16 javascript dom

我目前正在为JavaScript构建一个API,主要使用Visual Studio 2010和JetBrains WebStorm(如果您正在寻找一个防弹JavaScript IDE,那就太棒了).

虽然通过Visual Studio中的智能感知列表中寻找(尝试使用JavaScript API来熟悉自己),我注意到,这两个Documentdocument存在.

  1. Document和之间有什么区别document
  2. 什么是document(如果有的话)的实例?
  3. 如何使用Document(因为它不是一个函数,因此,不可构造)?
  4. 最重要的是,"猴子修补" Document使其可以构建的危害是什么?

这些问题背后的理由是,我要创建适合我的API一些对象(例如; Document,HTMLElement等),但这些似乎在某些方面已经存在了,我不相信,我应该重写他们的母语实现.

Ber*_*rgi 15

Document和之间有什么区别document

document(或window.document)是对窗口中包含的文档的引用.(规格)

Document是文档的DOM接口,它在全局对象上公开.(规格,规格)

如何使用Document(因为它不是一个函数,因此,不可构造)?

它是一个宿主对象,不需要遵循EcmaScript规范 - 但这并不意味着它不是一个功能.它可能因浏览器而异.但它并不打算被调用(如果你尝试它你会得到一个NOT_SUPPORTED_ERR),还有其他方法来实例化/获取新文档.你仍然可以使用它是什么

> document instanceof Document
true
> Document.prototype
DocumentPrototype {
    adoptNode: Function
    constructor: Document
    createAttribute: Function
    …
    querySelector: Function
    querySelectorAll: Function
}
|- NodePrototype
|- Object
Run Code Online (Sandbox Code Playgroud)

所以你可以扩展它的原型并在你的应用程序中的所有XMLDocuments/ 上使用这些方法HTMLDocuments(但前提是你知道扩展DOM有什么问题).

最重要的是,"猴子修补" Document使其可以构建的危害是什么?

我不确定你会怎么做.覆盖它可能会损害每个希望它按上述方式工作的脚本(除非你修复了prototype新函数的属性).也许在某些环境中Document属性window是不可写的,所以你可能会伤害自己.