为什么console.log(Firefox)显示带有直括号的对象?

时间:2018-09-13 17:50:50

标签: javascript constructor prototype

我已经搜索了许多现有的主题,但是没有一个具体的主题可以确切地指出我的疑问。只是为了学习。我已经创建了一个构造函数,其唯一目的是将其用作函数Array的目标(显然是创建一个数组),然后将与“正常”构造函数相同的函数与“ new”关键字一起使用。

function Myray(val0,val1,val2){ 
this[0] = val0;
this[1] = val1;
this[2] = val2;
}
// Not using the 'new' keyword, but the function Array.
var res = Array.call(Myray, 'one', 'two', 'three');

console.log(res);  -->  Array(3) [ "one", "two", "three" ]
console.log(Array.isArray(res));  //  -->  true

现在,通常在同一构造函数上使用'new'关键字,即可产生一个预期的对象,但将其作为数组对象显示在直括号之间。

function Myray(val0,val1,val2){ 
this[0] = val0;
this[1] = val1;
this[2] = val2;
}
var res2 = new Myray('one','two','three');
console.log(res2);  -->  Object(3) [ "one", "two", "three" ]

问题是,如果功能相同。当使用Array.call调用函数时,Array只关心查看被调用的对象,设置继承链并创建其结果数据类型(在本例中为数组)。第二个调用,对象函数,不应该这样做吗?为什么显示在直括号中?

1 个答案:

答案 0 :(得分:0)

我将接受Bergi的猜测,考虑到构造函数具有整数索引属性,浏览器的控制台可以根据需要自由设置格式。 原因是如果在 Node.js 终端中运行代码,它会在大括号之间显示结果,从而确认了Bergi的意见。我应该早做的...  谢谢大家。