Warum protokolliert die ES6-Klassensyntaxkonsole anders als eine ES5-Klassensyntax?

9

Ich versuche, ECMAScript 6 mehr und Vererbung ein bisschen besser zu lernen.

Frage: Wenn ich mich mit der Konsole abmelde bob vs daisy unterscheiden sie. bob protokolliert einen Prototyp unter __proto__ und zeigt seinen Konstruktor run:true; . Auf der ES6-Implementierung daisy hat keine __proto__ , aber% code_% ist weiterhin verfügbar. Warum?

%Vor%     
Matthew Harwood 15.05.2016, 21:11
quelle

1 Antwort

13

Dies liegt daran, dass in ES6-Klassen definierte Methoden nicht aufzählbar sind . In einem Man -Objekt ist isRunning aufzählbar, aber nicht in Frau . Und Chrome hat eine spezielle Möglichkeit, das Konsolenprotokoll zu verarbeiten. Je nach Vorhandensein von aufzählbaren Eigenschaften oder nicht, wird die Anzeige beeinflussen.

Der Unterschied in der Konsolenanzeige ist trivial, zeigt aber einen interessanten Unterschied in der Art, in der Klassen mit ES6 Class erstellt werden. Um es deutlicher zu sehen, können Sie versuchen, entweder Man isRunning nicht aufzählbar oder Woman isRunning aufzählbar zu machen, es sollte die gleiche Ausgabe in der Konsole geben. So für den Menschen nicht aufzählbar:

%Vor%

Oder aufzählbar in der Frau:

%Vor%

BEARBEITEN:

Beachten Sie, dass die ersten Entwürfe von ES6 standardmäßig auf "wahr" festgelegt wurden, aber sie wurden geändert, es handelt sich um eine Designentscheidung. Sie können Diskussionen sehen, die zu dieser Entscheidung führen: Ссылка

Im Grunde genommen haben native Prototypen normalerweise nicht aufzählbare Methoden, so dass es sinnvoll ist, dasselbe Verhalten mit benutzerdefinierten Klassen zu haben.

Diese Entscheidung wurde in Entwurf Nr. 32 eingeführt. Ссылка

    
Julien Grégoire 15.05.2016, 21:46
quelle