【发布时间】:2018-08-28 03:36:28
【问题描述】:
与其他编程语言相比,JavaScript 中的数组是相当不错的东西,而且它并非没有它的全部怪癖。
包括这个:
// Making a normal array.
var normalArray = [];
normalArray.length = 0;
normalArray.push(1);
normalArray[1] = 2;
normalArray; // returns [1, 2]
normalArray.length // returns 2
是的,以上就是我们都知道的如何制作数组并用元素填充它们,对吧? (暂时忽略normalArray.length = 0 部分)
但是为什么当相同的序列被应用到一个不是纯粹数组的对象上时,它看起来有点不同,并且它的length 属性有点偏离?
// Making an object that inherits from the array prototype (i.e.: custom array)
var customArray = new (function MyArray() {
this.__proto__ = Object.create(Array.prototype);
return this
});
customArray.length = 0;
customArray.push(1);
customArray[1] = 2;
customArray; // returns [1, 1: 2]
customArray.length // returns 1
不完全确定这里发生了什么,但我们将不胜感激。
【问题讨论】:
-
谢谢,但来自链接“stackoverflow.com/questions/34801251/…”的问题并不完全相关。它询问自定义对象对 Array 原型的继承;这不是为什么向自定义数组和普通数组添加元素(以不同方式)似乎有点狡猾的问题。
-
"直到并包括 ES5,无法以通常的构造函数原型方式干净地扩展 Array而不会丢失功能,相反,您必须向 Array 实例添加属性” 自定义数组将是
Array的扩展,不是吗? -
嗯,你说得有道理。是的,自定义数组基本上是
Array的扩展。这是否真的表明没有办法使数组的这种奇怪行为无效..?你引用了一些东西,我可以看看你从哪里得到的参考吗? -
我链接的问题的公认答案;)。您可以通过使用您最喜欢的搜索引擎查找子类或扩展 javascript 数组来找到类似的报告
标签: javascript