javascript - 当子类化内置函数时重写构造函数伪函数是否安全?

标签 javascript ecmascript-6 subclassing es6-class

在 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)方法(sliceconcatmapfilter)都使用抽象 ArraySpeciesCreate algorithm它将使用单个参数调用构造函数:整数长度。 Array.ofArray.from做一些非常相似的事情,尽管后者在从迭代器创建数组时不会传递长度。

concatslicefromof 也明确设置length 分配元素后的属性,mapfilter 则不然。

关于javascript - 当子类化内置函数时重写构造函数伪函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47321241/

相关文章:

javascript - AudioBuffer 不可缓存/解码AudioData 需要很长时间

javascript - Chrome 不会清除缓存(ctrl+F5、shift+F5(也打开调试控制台)不起作用)

javascript - 为什么 getElementById 在类内部调用时返回 null?

javascript - 带有 ES2015 babel 预设的 Marionette 不起作用

python - 如何将测试方法添加到一组 Django TestCase 派生类中?

iphone - 具有自己的 XIB 的 UIView 子类

javascript - Python中使用Selenium模拟鼠标ScrollUp

javascript - 为什么第二个yield首先在这个生成器中返回

python - 在子类 PyQT LineEdit 中正确处理 keyPressEvent

javascript - 为什么 String.match() 方法返回多个值?