Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有';命名为';JavaScript中的构造函数?(例如HTMLCollection)_Javascript_Html - Fatal编程技术网

带有';命名为';JavaScript中的构造函数?(例如HTMLCollection)

带有';命名为';JavaScript中的构造函数?(例如HTMLCollection),javascript,html,Javascript,Html,考虑以下两种创建对象实例的方法: 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

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

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是“类似于数组”的,因此它有一个长度属性,并将其内容存储在名为0、1、2等的属性中。这使它类似于数组,Firebug可以识别这一点,并像输出数组一样输出对象的字符串表示

对于Firebug,如果它看到
length
splice
属性,它会将对象视为数组,如下所示:

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

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

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

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

对于Firebug,如果它看到
length
splice
属性,它会将对象视为数组,如下所示:

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

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

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

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

对于Firebug,如果它看到
length
splice
属性,它会将对象视为数组,如下所示:

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

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

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

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

对于Firebug,如果它看到
length
splice
属性,它会将对象视为数组,如下所示:

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

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

JavaScript数组中有对象
typeof arr;//“对象”
。HTMLCollections和NodeList是类似于数组的对象,但不是数组。它们也是DOM的一部分,这意味着它们不在ECMAScript规范的范围内。您可以通过给任何对象一个长度和一个拼接
({length:0,拼接:function(){}});//[]
是的,我知道这一点。也许这是一个特定于萤火虫的问题。确定console.logged对象的属性是出现在块括号中还是出现在卷曲括号中的内容。但是可能有一个特定于JavaScript的解释。Firebug可以随意在控制台中显示它喜欢的对象。它也可以让你点击DOM视图,但这并不能真正告诉你关于JS的任何信息。@AntonHarald预编程实例类型或任何具有长度和拼接的对象当我向构造函数添加长度和拼接道具时,我再次得到一个“匿名”控制台。log:object[“.”,“.”参见此处:根据HTMLCollection案例,我希望ArrLikeObj[“.”、“.”作为这个fiddle中的控制台输出“对象”
。HTMLCollections和NodeList是类似于数组的对象,但不是数组。它们也是DOM的一部分,这意味着它们不在ECMAScript规范的范围内。您可以通过给任何对象一个长度和一个拼接
({length:0,拼接:function(){}});//[]
是的,我知道这一点。也许这是一个特定于萤火虫的问题。确定console.logged对象的属性是出现在块括号中还是出现在卷曲括号中的内容。但是可能有一个特定于JavaScript的解释。Firebug可以随意在控制台中显示它喜欢的对象。它也可以让你点击DOM视图,但这并不能真正告诉你关于JS的任何信息。@AntonHarald预编程实例类型或任何具有长度和拼接的对象当我向构造函数添加长度和拼接道具时,我再次得到一个“匿名”控制台。log:object[“.”,“.”参见此处:根据HTMLCollection案例,我希望ArrLikeObj[“.”、“.”作为这个fiddle中的控制台输出“对象”
。HTMLCollections和NodeList是类似于数组的对象,但不是数组。它们也是DOM的一部分,这意味着它们不在ECMAScript规范的范围内。您可以在控制台中使任何对象看起来像一个数组,即使它是未知的