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



在 ES6 中,我们终于可以像 Array 这样的内置子类

class Bar extends Array {
    ...
}

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

现在,假设我为 Bar 定义了一个自定义构造函数。是否可以保证Array的静态和成员方法如何调用它们通过Symbol.species查找的构造函数?简而言之,为像Array这样的内置子类提供用户定义的构造函数是否安全?

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

是的,它被正确指定和确定。具体来说,所有的原型方法(sliceconcatmapfilter(都使用抽象的ArraySpeciesCreate算法,该算法将使用单个参数调用构造函数:整数长度。 Array.ofArray.from 执行的操作非常相似,尽管后者在从迭代器创建数组时不会传递长度。

concatslicefromof在分配元素后也显式设置了length属性,mapfilter则没有。

最新更新