为什么节点以及Node.prototype具有常数ELEMENT_NODE

问题描述 投票:1回答:1

读取specs我会认为NodeNode.prototype定义了nodeType值ELEMENT_NODEATTRIBUTE_NODE等。但是,事实证明(至少在Firefox中是),您可以通过两个实例类访问它们。

console.log(Node.ELEMENT_NODE)
console.log(Node.prototype.ELEMENT_NODE)

这是规格的缺点吗?我在读书时想念东西吗?澄清会很棒!

javascript dom
1个回答
0
投票

因为它们是在接口上定义的constantsconst)。

WebIDL specs

常量与它们出现在其上的接口或回调接口的特定实例无关。是否在实例上公开常量是特定于语言的。

然而,ECMAScript语言绑定确实允许通过实现IDL接口的对象访问常量,在这些IDL接口上声明了常量。例如,使用以下IDL:

[Exposed=Window]
interface A {
 const short rambaldi = 47;
};

可以在ECMAScript中以A.rambaldiinstanceOfA.rambaldi的形式访问该常数值。

因此,就像在接口上定义的任何其他const一样,您可以直接在接口上或在任何实例上访问它,因此实现者也只需在原型上公开它。

© www.soinside.com 2019 - 2024. All rights reserved.