这是我无法找到官方答案的。对于某些人来说,DOM对象是JS对象,对于其他对象则不同。什么是正确的答案? 通过在stackoverflow中搜索,您可能会看到有争议的意见。
例如,对象 document.body 仅属于DOM API还是可以被视为javascript引擎的一部分?
Javascript是创建它的内部表示还是只与DOM通信才能访问它?
答案 0 :(得分:9)
DOM API是一个collection of standards,其实现位置为variety of programming languages。
浏览器中JavaScript可用的DOM以JavaScript对象的形式提供。其中很大一部分是用本机代码编写的(因此由不是用JavaScript编写但通过JavaScript API提供的库来处理)。
JavaScript离开并且本机代码开始并不重要,它是一个实现细节,可能因浏览器而异。拥有标准API的关键在于使用它的开发人员与该API进行交互,而无需担心它是如何在幕后实现的。
答案 1 :(得分:4)
严格来说,没有。 JavaScript运行时可以访问它们,以该容量可以作为JavaScript对象使用。但它们的定义方式不受任何特定语言的约束,在大多数DOM实现中,它们都是本机代码。大多数DOM实现都会注意使对象的功能与您期望所选语言中的其他对象一样有效,但这并不总是与JavaScript对象相同:例如,您无法添加动态属性在Java工作时使用对象。
对于大多数实际用途,当您在浏览器或其他JavaScript运行时工作时,是的。如上所述,大多数DOM实现尝试使DOM对象的工作方式与语言中的其他对象相同,对于JavaScript,这意味着使它们像“真正的”JavaScript对象一样工作。虽然IE需要一段时间才能真正做到这一点(你需要IE9 +才能充分利用),但是现在你可以像使用任何其他JavaScript对象一样使用DOM对象。
答案 2 :(得分:2)
例如,如果您深入检查__proto__
的{{1}},您会发现:
HTMLBodyElement> HTMLElement>元素>节点> EventTarget>的对象强>
所以是的:在浏览器的上下文中,DOM对象是JS对象,当然这不是互惠的。
但是 DOM API并不是Javascript独有的,它定义了可以用任何语言实现的接口,例如Python has a DOM API,在这种情况下,DOM对象是Python对象。< / p>
答案 3 :(得分:0)
DOM对象不是JavaScript语言的一部分,它们是JavaScript在浏览器中运行时提供的环境的一部分。
当JavaScript在另一个环境中运行时,例如在Node.js中,则没有DOM。相反,还有其他对象构成了脚本使用的环境。
DOM对象仅适用于JavaScript,因此脚本直接与对象一起工作,没有额外的包装器可供JavaScript使用。