【发布时间】:2019-08-27 08:40:40
【问题描述】:
为什么从“下游”函数创建的对象与从“上游”函数创建的对象不同?
如果你创建一个继承自 Javascript 的 Array 构造函数的构造函数,那么你会期望从你的构造函数和 Array 构造函数创建的对象是相同的。
为什么在这种情况下对象不一样?
我尝试将 NewArray.prototype.constructor 设置为 Array 但它仍然给了我相同的结果。
function NewArray() {};
NewArray.prototype = Object.create(Object.getPrototypeOf([]));
NewArray.prototype.constructor = NewArray;
NewArray.prototype.first = function() {
return this[0];
}
let newArr = new NewArray();
let oldArr = new Array();
newArr.push(5) // {'0': 5, length: 1}; shouldn't it output [5] ???
oldArr.push(5) // [5]
【问题讨论】:
-
push函数的返回值是新元素被推送后数组的新长度......如果你没有改变这种行为,为什么你会期待别的东西? -
“它不应该输出 [5] 吗?” – 那么……应该 what 输出 [5] 吗?如果您谈论的是浏览器的控制台,它将以各种方便的方式可视化值。没有关于应该如何出现在控制台中的规范。它可能有一个专门针对
Array实例的特殊规则,但其他自定义对象作为对象输出。
标签: javascript oop prototype