gpt4 book ai didi

javascript - 当扩展数组映射未定义时

转载 作者:行者123 更新时间:2023-11-29 23:27:34 25 4
gpt4 key购买 nike

我正在尝试扩展 Array 以便我可以添加我自己的附加功能。我读到扩展 Array.prototype 可能很危险,所以我正在尝试通过类继承以正确的方式做到这一点。

我遇到的问题是 map 未定义。我显然可以解决这个问题,但我不明白为什么我要扩展 Array 并因此应该具有它的功能?

export default class Array2 extends Array {
constructor(items) {
super(...items);
}

addOne() {
return this.map((x)=>{
return x+1;
})
}
}

let arry2 = new Array2 ([9, 1, 4, 0]).addOne();
console.log(arry2);

我希望 Array2 (4) [10, 2, 5, 1] 登录到控制台,但我却抛出了以下错误。

Uncaught TypeError: undefined is not a function

编辑删除构造函数似乎可以解决问题,但不能解释为什么存在构造函数时它会失败。特别是当构造函数只是调用 super 时。

最佳答案

调试用

constructor(items) {
console.log(...arguments);
super(...items);
}

可能会对此有所启发。在 map 中,创建了一个类型为 Array2 的新数组 - 它正在调用具有所需长度的构造函数,4 - 就像一个标准的 Array 会支持这个。但是,您正在将参数 items 传播到 super 调用中,它将尝试迭代值 4 - 显然它不可迭代,失败并显示 "4[Symbol.iterator]() 不是函数”(好吧,这就是消息应该的意思)。

为避免这种情况,请使用标准构造函数签名并将任何参数直接传递给 super。或者简单地省略 constructor,因为默认构造函数会为您完成此传递。

使用

export default class Array2 extends Array {
addOne() {
return this.map((x)=>{
return x+1;
})
}
}

const array2 = Array2.from([9, 1, 4, 0]).addOne();
const array3 = Array2.of(9, 1, 4, 0).addOne();
console.log(array2, array3);

这就是 offrom 的用途。

关于javascript - 当扩展数组映射未定义时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48525168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com