2017-11-16 5 views
2

In ES6, können wir schließlich Unterklasse builtins wie Array:Ist es sicher, die Pseudofunktion des Konstruktors zu überschreiben, wenn man Builtins untergliedert?

class Bar extends Array { 
    ... 
} 

Ohne besondere etwas zu tun, die Array Methoden, die normalerweise Array Instanzen zurückkehren würde Bar Instanzen zurückkehren wird, wenn durch eine Bar genannt, da sie ihre Konstruktor nachschlagen Funktion durch Symbol.species.

Nun sagen, ich habe eine benutzerdefinierte Konstruktorfunktion für Bar definiert. Gibt es jeder Garantie wie zu wie statische und Mitglied Methoden von Array rufen Sie den Konstruktor sie durchschauen Symbol.species? Ist es, kurz gesagt, jemals sicher, einen benutzerdefinierten Konstruktor für eine Unterklasse eines Built-ins wie Array bereitzustellen?

Antwort

2

Gibt es eine Garantie, wie statische und Member-Methoden von Array den Konstruktor aufrufen?

Ja, es ist richtig angegeben und genagelt. Insbesondere verwenden alle Prototypmethoden (slice, , map, filter) die Zusammenfassung ArraySpeciesCreate algorithm, die den Konstruktor mit einem einzigen Argument aufrufen wird: eine Ganzzahllänge. Array.of und Array.from machen Sie etwas sehr ähnliches, obwohl das Letztere keine Länge überschreitet, wenn es ein Array von einem Iterator erstellt.

concat, slice, from und of auch explizit die length Eigenschaft nach dem die Elemente zuweisen gesetzt haben, map und filter nicht.

+0

In der Spezifikation, wieder. Ich denke, ich sollte öfter dort nachsehen! – Textfield

+1

TBH, auch wenn sie nur 6 Methoden sind, ist ihr Verhalten in "Länge" überraschend inkonsistent. Vielleicht sollte ich ein Problem einreichen. – Bergi

Verwandte Themen