在 ES6 中,我们终于可以对 Array
之类的内置函数进行子类化:
class Bar extends Array {
...
}
无需执行任何特殊操作,通常返回 Array
实例的 Array
方法在通过 Bar 调用时将返回
,因为它们通过 Bar
实例Symbol.species
查找构造函数。
现在,假设我为 Bar
定义了一个自定义构造函数。对于 Array
的静态方法和成员方法如何调用通过 Symbol.species
查找的构造函数,是否存在任何保证? >?简而言之,为 Array
等内置函数的子类提供用户定义的构造函数是否安全?
最佳答案
Is there any guarantee as to how static and member methods of
Array
call the constructor?
是的,它已被正确指定并确定下来。具体来说,所有原型(prototype)方法(slice
、concat
、map
、filter
)都使用抽象 ArraySpeciesCreate algorithm它将使用单个参数调用构造函数:整数长度。 Array.of
和 Array.from
做一些非常相似的事情,尽管后者在从迭代器创建数组时不会传递长度。
concat
、slice
、from
和 of
也明确设置length
分配元素后的属性,map
和 filter
则不然。
关于javascript - 当子类化内置函数时重写构造函数伪函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47321241/