DOM 对象是常规的 Javascript 对象吗?如果不是,它们是什么?
5 回答
DOM 对象是更规范的 Javascript 对象吗?如果不是,它们是什么?
不,它们是“宿主对象”。它们不一定遵循与原生 JavaScript 对象相同的规则。
它们在某种意义上是对象,但它们是由宿主环境添加的,不是 ECMAScript 规范的一部分。
例如,我不相信有什么要求他们接受 expando 属性。或者在函数的情况下,我不知道它们是否需要具有可访问和可扩展的prototype
属性。
此外,函数可能有也可能没有典型的方法Function.prototype
,比如.call()
和.apply()
。
这些规则比 ECMAScript 规范定义的对象的规则要宽松得多,因此您不必在所有情况下都依赖相同的行为。
以下是来自Mozilla 开发网络的 Documnet 对象模型 (DOM) 的描述:
文档对象模型是 HTML 和 XML 文档的 API。它提供文档的结构表示,使您能够修改其内容和视觉呈现。本质上,它将网页连接到脚本或编程语言。
Web 开发人员可用于操作和创建网页的所有属性、方法和事件都组织成对象(例如,表示文档本身的文档对象、表示 HTML 表格元素的表格对象等) . 在最新的 Web 浏览器中,可以通过脚本语言访问这些对象。
DOM 最常与 JavaScript 结合使用。也就是说,代码是用 JavaScript 编写的,但它使用 DOM 来访问网页及其元素。但是,DOM 被设计为独立于任何特定的编程语言,从而使文档的结构表示可从单一、一致的 API 获得。尽管我们在整个站点中都专注于 JavaScript,但可以为任何语言构建 DOM 的实现。
万维网联盟为 DOM 建立了一个标准,称为 W3C DOM。既然最重要的浏览器正确地实现了它,它应该能够支持强大的跨浏览器应用程序。
对,他们是:
> typeof document.body
"object"
> document.body instanceof Object
true
它们是类型HTMLElement
DOM 是一个 API,因此一组预定义的“对象”附加到窗口“命名空间”。它可以是 HTMLElement,但不仅是它们,它们不是 javascript 核心的一部分。所以有 javascript 核心和 DOM ,你可以有其他的 API。