Quand j'ai lu la description sur MDN, j'ai rencontré des doutes. MDN décrit cette méthode comme ceci
Vous souhaiterez peut-être renvoyer des objets Array sur la classe de tableau étendue MyArray. Par exemple, lorsque vous utilisez des méthodes telles que map() qui renvoient le constructeur par défaut, vous souhaitez que ces méthodes renvoient l'objet Array du parent au lieu de l'objet MyArray.
// demo
class MyArray extends Array {
static get [Symbol.species]() {
return Array; // 1
}
}
var a = new MyArray(1, 2, 3); // 2
var mapped = a.map(x => x * x); // 3
console.log(mapped instanceof MyArray); // false
console.log(mapped instanceof Array); // true
D'après ma compréhension, cette méthode sera déclenchée lors de la création de l'objet, et l'objet obtenu doit également être une instance de type Array. Le débogage a révélé que lorsque le code était exécuté au point 2, il ne sautait pas au point 1 pour l'exécution, mais continuait l'exécution au point 1 lorsque la méthode map au point 3 était exécutée. En ce moment a instanceof MyArray === true, a instanceof Array === true
. Après avoir exécuté 3 étapes, le résultat de sortie dans le code sera obtenu.
Quand cette méthode sera-t-elle déclenchée ? Pourquoi une instance de MyArray === true mais une instance mappée de MyArray === false ?
Vous pouvez lire les instructions du professeur Ruan http://es6.ruanyifeng.com/#do... La valeur du symbole intégrée