Symbol.species影响的到底是什么
阅读JavaScript高级程序设计第四版了解到:
思维发散
所有的不修改原数组的方法都会受到影响吗
测试
class MyArray extends Array {
static get [Symbol.species]() {
return function () {
return [1, 2, 3];
};
}
}
const myArray = new MyArray();
const sorted = myArray.toSorted();
const map = myArray.map(() => {});
console.log(myArray); // MyArray []
console.log(sorted); // []
console.log(map); // [1,2,3]
并不是toSorted没有被影响,
调研
toSorted
注意到第四行根据读取到的len创建数组,没有发现什么猫腻,对照打开filter
filter
发现了猫腻,同样第四行使用的是ArraySpeciesCreate,那么区别应该是这里
ArraySpeciesCreate
第五行去读取 %Symbol.species%
%Symbol.species%
结论
只有直接间接 a. Set C to ? Get(C, %Symbol.species%).才会受影响。