ES12 新增了一个 Symbol.species 属性,可用于指定在派生类中使用的构造函数。当通过方法调用版本的 map、filter、slice 等函数来创建派生类对象时,新的 constructor 会被调用,以此创建一个新的实例对象。Symbol.species 属性通过使代码更加可维护和可读来提高代码的质量。
Symbol.species 的使用
Symbol.species 是一个内置的属性,用于指定构造函数的最佳实现。如果派生类需要继承其父类的行为,那么该构造函数通常需要与父类相同。在这种情况下,派生类可以使用 Symbol.species,以指定使用该属性值作为默认构造函数。
例如,如果想在自己的库中实现一个类似于 Array.prototype.map 的函数,可以将 Symbol.species 设定为一个类似于这样的方法:
----- ----------- ------- ----- - ------ --- ------------------ - ------ ------ - -- --- -
这样,当我们调用 map 方法或者其他方法创建自定义的数组时,便可以接收自定义数组对象的子类,并使用相应的构造函数来创建新对象实例。
这个方法还可以用于其他类的操作,例如字符串,Set 等。
Code Examples
下面我们来看一个具体的例子:
----- ----------- ------- ----- - ------ --- ------------------ - ------ ------ - ------------------- - --- ----- - -- --- ---- - - -- - - ------------ ---- - ----- -- -------- - ------ ------ - - ----- ------ - --- -------------- -- --- ----- -------- - ---------------- -- --- - --- ---------------------- ------------------------------------------
在这个例子中,我们定义了 CustomArray 类,并通过 Symbol.species 设置使用 Array 作为默认构造函数。我们还添加了一个 customCalculation 方法来执行自定义的计算。当我们将 map 方法应用到 CustomArray 的实例 cArray 上时,将会创建一个新数组实例,其中每个元素都是原始数组元素的两倍。在这个例子的输出中,可以看到这个新数组实例,以及使用自定义方法 customCalculation 对其进行计算的结果。
总结
使用 Symbol.species 方法来优化代码可维
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6504139295b1f8cacd0d0b8f