javascript / expert
Snippet
Unterklassenbildung von Array mit benutzerdefinierten Symbol.species Transformations-Pipelines
Das Überschreiben von Symbol.species in Array-Unterklassen steuert, ob Standard-Array-Ableitungsmethoden wie slice oder map Instanzen der Unterklasse oder des Standard-Arrays erzeugen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
class MatrixArray extends Array {static get [Symbol.species]() {return Array;}sum() {return this.reduce((acc, val) => acc + val, 0);}}const matrix = new MatrixArray(10, 20, 30);const sliced = matrix.slice(1);console.log(matrix.sum(), sliced instanceof MatrixArray);
nodejs
Erklärung
1
class MatrixArray extends Array {
Erweitert den eingebauten Array-Konstruktor um benutzerdefinierte Array-Methoden.
2
static get [Symbol.species]() {
Definiert den statischen Getter für die Species-Konstruktor-Delegierung.
3
return Array;
Erzwingt, dass Array-Methoden native Array-Objekte für abgeleitete Ergebnisse erzeugen.
4
}
Schließt die Symbol.species Getter-Definition.
5
sum() {
Definiert benutzerdefinierte Instanzmethode auf dem MatrixArray-Prototyp.
6
return this.reduce((acc, val) => acc + val, 0);
Berechnet die numerische Summe mittels Array-Prototyp reduce.
7
}
Schließt den sum-Methodenblock.
8
}
Schließt die MatrixArray-Klassendeklaration.
9
const matrix = new MatrixArray(10, 20, 30);
Erstellt eine benutzerdefinierte MatrixArray-Instanz gefüllt mit Zahlen.
10
const sliced = matrix.slice(1);
Erstellt ein Teil-Array unter Verwendung des Species-Override-Konstruktors.
11
console.log(matrix.sum(), sliced instanceof MatrixArray);
Gibt die berechnete Summe aus und prüft ob sliced eine Standard-Array-Instanz ist (false).