我想要一个基于 Uint32Array 的数组。数组的长度应该随着元素数量的增加而增加。同时我希望“长度”属性返回元素的数量,而不是底层数组的大小。例如:
var a = new myArray();
a.length; // returns 0, the size of underlying array is 10
a.add(0);
a.length; // returns 1, the size of underlying array is 10
...
a.add(9);
a.length; // returns 10, the size of underlying array is 10
a.add(10);
a.length; // returns 11, the size of underlying array is 20
下面的代码显示了我是如何尝试实现它的。唯一的障碍是访问原始数组的“长度”属性。代码中的“父”字仅用于示例。如果我用“this.prototype”替换它,它会在未定义中显示“this.prototype.length”。
有可能解决它吗?
var myArray = function() {
this._length = 0;
return this;
// defining the getter for "length" property
Object.defineProperty(this, "length", {
get: function() {
return this._length;
},
};
myArray.prototype = new Uint32Array(myArray.increment);
myArray.increment = 10;
myArray.add = function(val) {
if (this.length <= parent.length) {
_a = new Uint32Array(parent.length + myArray.increment);
_a.set(this);
this = _a;
};
this[this.length++] = val;
};