gpt4 book ai didi

javascript - JavaScript 中带有 'named' 构造函数的数组? (例如 HTMLCollection)

转载 作者:行者123 更新时间:2023-11-28 19:06:19 26 4
gpt4 key购买 nike

考虑以下两种创建对象实例的方法:

function f() { return { k: 'v'} }
var inst1 = f();

function F() { this.k = 'v'; }
var inst2 = new F();

inst1 和 inst2 的行为是相同的,唯一的区别是向对象保存了不同的构造函数:

inst1.constructor; // Object()
inst2.constructor; // F()

数组的构造函数是什么?请参阅:

var xs = [];
xs.constructor; // Array()

到目前为止,我明白了其中的逻辑。但我遇到了以下问题:

var tags = document.getElementsByTagName("*");
typeof tags; // object
tags.constructor; // HTMLCollection()

到目前为止,它与 inst2 示例类似。但是当我使用 Firebug 进行 console.log 时,我收到类似带有“命名”构造函数的数组之类的内容:

console.log(tags); // HTMLCollection[tag1, tag2, ...]

大括号让我困惑,我本来以为这里是大括号。对此必须有一个解释,有人知道答案吗?

最佳答案

听起来您问题的关键在于确定 Firebug 如何显示您的对象。 Firebug 检查您传递给它的对象,并根据对象的属性选择如何将对象显示为字符串。

HTMLCollection 是“类数组”,因此它有一个 length 属性,并将其内容存储在名为 0、1、2 等的属性中。这使其成为类数组,Firebug 可以识别这一点,输出对象的字符串表示形式就像一个数组一样。

对于 Firebug,如果它看到 lengthsplice 属性,它会将对象视为类似数组:

var MyArrayLike = function(){
this[0] = 1;
this.length = 1;
this.splice = function(){};
}

Firebug 输出:

-> new MyArrayLike();
<- [1]

关于javascript - JavaScript 中带有 'named' 构造函数的数组? (例如 HTMLCollection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31598490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com