我正在使用
sum
、mean
、std
等数值方法从 Array 实现扩展类。
实例化具有 0 个或 2 个以上元素的对象没有问题,但我无法使用相同的方法实现单元素对象:
let n0 = new FooArray();
let n0 = new FooArray(1);
let n2 = new FooArray(1, 2);
我开始实现一个自定义构造函数来处理这个单元素(下面的代码),但我不确定这是一种好的做法,因为我无法使用
fill
方法,例如(new FooArray(2).fill(0)
)。
class FooArray extends Array {
constructor(...items) {
if (items.length == 1) {
super();
this.push(items[0]);
} else {
super(...items);
}
}
}
将单个整数参数传递给构造函数将创建一个包含许多空槽的数组。传递更多参数或一个非整数参数将创建一个以这些元素作为内容的数组。
Array.of()
以保持一致的工作。它始终创建一个数组,其中包含参数作为项目。而且你不需要重新发明它,你可以直接在你的自定义数组实现中使用它:
class FooArray extends Array {
customMethod() {
return "custom functionality";
}
}
const myarray = FooArray.of(42);
console.log(myarray.length);
console.log(myarray[0]);
console.log(myarray);
console.log(myarray.customMethod());