Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 映射函数不使用扩展数组的类_Javascript_Arrays_Es6 Class - Fatal编程技术网

Javascript 映射函数不使用扩展数组的类

Javascript 映射函数不使用扩展数组的类,javascript,arrays,es6-class,Javascript,Arrays,Es6 Class,我有一个扩展数组的类 class PositionsAndMedia extends Array { constructor(x) { super(...x.map(x => new MyClass(x))); } } 类构造函数接收一个对象数组,并使用MyClass转换每个对象 一切似乎都很完美,但如果我尝试: positionsAndMediaInTree = new PositionsAndMedia(myArray) positionsAndMed

我有一个扩展数组的类

class PositionsAndMedia extends Array {
    constructor(x) {
        super(...x.map(x => new MyClass(x)));
    }
}
类构造函数接收一个对象数组,并使用MyClass转换每个对象

一切似乎都很完美,但如果我尝试:

positionsAndMediaInTree = new PositionsAndMedia(myArray)
positionsAndMediaInTree.splice(matchingIndex, 1);
我在浏览器中遇到此错误:

classes.js:73 Uncaught TypeError: positionsAndMedia.map is not a function
    at new PositionsAndMedia (classes.js:73)
    at PositionsAndMedia.slice (<anonymous>)
    at <anonymous>:1:34
classes.js:73未捕获类型错误:positionsAndMedia.map不是函数
在新位置和媒体(classes.js:73)
在位置sandmedia.slice()处
时间:1:34
第73行是类定义中的
super(..)

由于
PositionsAndMedia
类扩展了数组类,因此我假设
map()
方法可用于
PositionsAndMedia


为什么会出现这个错误?如何避免它?

您的错误消息显示的是
slice
,而不是
splice
,并且该错误对于
slice
(但对于
splice
)是有意义的

您的
PositionsAndMedia
构造函数假定它总是获取一个数组作为参数,但这并不总是正确的
slice
创建并返回一个新数组,它通过调用数组子类的构造函数(在本例中为
PositionsAndMedia
)创建它返回的新数组,而不带任何参数。其他数组方法,如
map
filter
,也可以这样做

数组子类构造函数必须允许
Array
允许的所有类型的参数:

  • 一点也没有
  • 设置长度的单个数字
  • 用于设置初始内容的非数字或多个参数
修复它的最小更改可能如下所示:

class PositionsAndMedia extends Array {
    constructor(x, ...rest) {
        if (Array.isArray(x)) {
            // You might consider doing something with `rest` here, too,
            // since otherwise any other arguments are ignored
            super(...x.map(x => new MyClass(x)));
        } else {
            // Default behavior
            super(x, ...rest);
        }
    }
}

您的错误消息与代码不匹配(
positionsAndMedia
vs.
positionsAndMedia intree
slice
vs.
splice
)。请使用演示问题的示例更新您的问题,最好是使用堆栈片段(
[]
工具栏按钮)运行的问题。