子类化内置函数时覆盖构造函数伪函数是否安全?

时间:2017-11-16 03:46:12

标签: javascript ecmascript-6 subclassing es6-class

在ES6中,我们最终可以继承像Array这样的内置类:

class Bar extends Array {
    ...
}

在没有做任何特殊操作的情况下,通常返回Array实例的Array方法在通过Bar调用时将返回Bar个实例,因为它们会查找其构造函数通过Symbol.species

现在,我说我为Bar定义了一个自定义构造函数。是否 简而言之,为Array这样的内置子类提供用户定义的构造函数是否安全?

1 个答案:

答案 0 :(得分:2)

  

是否保证Array的静态和成员方法如何调用构造函数?

是的,它已正确指定并确定下来。具体来说,所有原型方法(sliceconcatmapfilter)都使用抽象ArraySpeciesCreate algorithm,它将使用单个参数调用构造函数:整数长度。 Array.ofArray.from做了类似的事情,虽然后者在从迭代器创建数组时没有传递长度。

concatslicefromof在分配元素length和{{}后也会显式设置map属性1}}不要。