Verschachtelte ES6-Klassen?
Scheint es möglich, nest in einer Klasse einen Konstruktor, die dann instanziiert werden, von überall innerhalb der Klasse, ist dies offiziell?
[BEARBEITEN] E. g.,
class C {
constructor() {
class D {
constructor() { }
}
}
method() {
var a = new D(); //works fine
}
}
//var a = new D(); //fails in outer scope
Dem traceur zusätzlich generierten JS https://google.github.io/traceur-compiler/demo/repl.html
$traceurRuntime.ModuleStore.getAnonymousModule(function() {
"use strict";
var C = function C() {
var D = function D() {};
($traceurRuntime.createClass)(D, {}, {});
};
($traceurRuntime.createClass)(C, {method: function() {
var a = new D();
}}, {});
return {};
});
//# sourceURL=traceured.js
Können Sie ein konkretes Beispiel?
Oder wie findest du diese heraus? Kein browser implementiert Klassen noch.
Ich bin mir sicher, dass ich Lesen Sie irgendwo, und es gebührend blieb in Geist - gehackt mit traceur (ref. link oben).
Das ist wahrscheinlich ein bug in traceur.
Dein Beispiel nicht selbst die Arbeit in traceur
Oder wie findest du diese heraus? Kein browser implementiert Klassen noch.
Ich bin mir sicher, dass ich Lesen Sie irgendwo, und es gebührend blieb in Geist - gehackt mit traceur (ref. link oben).
Das ist wahrscheinlich ein bug in traceur.
Dein Beispiel nicht selbst die Arbeit in traceur
InformationsquelleAutor user5321531 | 2015-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt keine geschachtelten Klassen, die in ES6, und es gibt keine solche Sache als private member in die Klasse syntax sowieso, wenn du das meinst.
Natürlich kannst du eine zweite Klasse als eine statische Eigenschaft einer anderen Klasse wie folgt:
oder verwenden Sie einen zusätzlichen Bereich:
(Es scheint einen bug mit der traceur, wie es verwendet ein gehisst
var
für die Klasse Erklärung anstelle von block-scope)Mit der die vorgeschlagene Klassen-Feld-syntax, wird es auch möglich sein, schreiben einen einzigen Ausdruck oder Erklärung:
Was meinst du mit "verlieren der Leerlaufdrehzahl"?
sollte
A.B = class B { ..
. Ansonsten ist die Klasse anonym.Es ist nichts falsch mit der anonymen Klassen 🙂 natürlich können Sie es hinzufügen, wenn Sie möchten.
Nein, das ist nicht ein Geschmack von JS. Das Typoskript (die Sie vielleicht eingestellt haben, zu kompilieren, um ES6).
InformationsquelleAutor Bergi
Könnte man eine getter:
Welche in der neuesten Chrome Dev 44.0.2376.0 auf Apple 10.10.2 gibt in der Konsole
new huffman.Node
Node {symbol: 0, weight: 0}
new Huffman.Node
Node {symbol: 0, weight: 0}
In anderen news, Getter sind die geheime Zutat, lassen Sie uns tun eine ganze Menge Cooler Dinge, die in ES6.
Bitte Beachten Sie Der obigen Konstruktion bricht
instanceof
fürNode
(warum? weil eine ganz neue Klasse definiert ist mit jedem get-Aufruf). Um nicht zu brecheninstanceof
definieren Knoten außerhalb des Bereichs einer einzelnen getter, entweder im Konstruktor (Deaktivierung des Huffman.Knoten-Klasse Eigenschaft und verursachtinstanceof
auf die Arbeit innerhalb des namespace eine einzige Huffman-Instanz, und brechen außerhalb), oder definieren Sie den Knoten bei einem Geschwister oder Vorfahren Umfang zu Huffman (so dassinstanceof
arbeiten in allen Bereichen unten, wo der Knoten definiert ist).instanceof
/die Prototyp-Kette, die Sie auch brechen Leistung. Solltest du wirklich nur verwendenhuffman.Node = class { constructor(){ this.symbol=0; this.weight=0; } };
Ich Neige zu der code einer Klasse pro Modul/Datei heutzutage, aber haben gedacht, dass, wenn eine Klasse wurde dort füllen Sie ein Attribut der anderen Klasse (also, gelöscht wird, wenn die Instanz der Klasse ist es ein Attribut gelöscht wird) und wurde von keine anderen Klassen, dann würde ich die Klasse in der gleichen Modul -, die effektiv ist die gleiche wie geschachtelte Klassen (aber nicht ganz, wäre es nicht möglich nest einer Klasse in eine geschachtelte Klasse in dieser Weise, eine geschachtelte Rahmen vielleicht an dieser Stelle).
Warten Sie, diese Klassen in deinem code (und die, die der OP will) nicht auf Eigenschaften von Instanzen, aber Sie sind gebunden an die ganze Klasse selbst.
Die nicht-statische bekommen, ist eine Eigenschaft der Instanz und die statische get ist eine Eigenschaft der Klasse. Eine andere nette Lösung ist, um Verwandte Klassen in einem Modul, so konnten wir noch eine Huffman-Modul mit Encoder -, Knoten-und Decoder-Klassen. Sie sind alle Modul Eigenschaften und alle im gleichen Umfang.
Meinst du meine Frage zum laden von scripts? Wenn Nein, bitte kommentieren Sie, die Antwort da. Und Nein, ich habe eigentlich gar keine tieferen Gedanken, die auf DI.
InformationsquelleAutor user2530580
sowas?
InformationsquelleAutor Ammatwain