Heim > Fragen und Antworten > Hauptteil
Als ich die Beschreibung auf MDN las, kamen mir Zweifel. MDN beschreibt diese Methode so
Möglicherweise möchten Sie Array-Objekte in der erweiterten Array-Klasse MyArray zurückgeben. Wenn Sie beispielsweise Methoden wie „map()“ verwenden, die den Standardkonstruktor zurückgeben, möchten Sie, dass diese Methoden das Array-Objekt des übergeordneten Elements anstelle des MyArray-Objekts zurückgeben.
// 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
Nach meinem Verständnis wird diese Methode beim Erstellen des Objekts ausgelöst und das erhaltene Objekt sollte auch eine Instanz des Array-Typs sein. Beim Debuggen wurde festgestellt, dass der Code bei der Ausführung an Punkt 2 nicht zur Ausführung zu Punkt 1 sprang, sondern die Ausführung bis Punkt 1 fortsetzte, als die Kartenmethode an Punkt 3 ausgeführt wurde. Zu dieser Zeit a instanceof MyArray === true, a instanceof Array === true
. Nach der Ausführung von 3 Stellen wird das Ausgabeergebnis im Code erhalten.
Wann wird diese Methode ausgelöst? Warum eine Instanz von MyArray === true, aber eine zugeordnete Instanz von MyArray === false?