Warum kann ich auf Typoskript private-member, wenn ich nicht in der Lage sein?
Ich bin auf der Suche, um die Umsetzung der privaten Mitglieder in Schriftlicher, und ich finde es ein wenig verwirrend. Intellisense nicht erlauben, Zugriff auf private member, aber in reinem JavaScript, es ist alles da. Das macht mich denken, dass TS nicht umsetzen private Mitglieder richtig.
Irgendwelche Gedanken?
class Test{
private member: any = "private member";
}
alert(new Test().member);
- Sie Wundern sich, warum IntelliSense nicht geben Ihnen die privaten member auf die Zeile mit dem alert()?
- NÖ. Ich Frage mich, warum TS hat ein eigenes, wenn, dass ist nur ein Zucker für intellisense, und nicht wirklich für die JavaScript kompiliert zu. Dieser code ausgeführt, der in typescriptlang.org/Playground Alarme private-member-Wert.
- Wie bereits erwähnt, müssen Sie Elemente deklarieren wie eine variable in einem privaten Rahmen zu haben, Sie privat. Ich vermute, Maschinenschrift, tut dies nicht, weil es ineffizient vs hinzufügen, um den Prototyp. Es auch Durcheinander mit der type-definition (die privaten Mitglieder sind nicht wirklich Teil der Klasse)
- Wenn Sie möchten, dass die realen privaten Variablen, die vorhanden sind, auf dem Prototyp, dauert es ein gewisser Aufwand, aber ich habe geschrieben eine Bibliothek namens ClassJS, die genau auf GitHub: github.com/KthProg/ClassJS.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genau wie bei der Typ-Prüfung, die Privatsphäre der Mitglieder sind nur durchgesetzt werden innerhalb des Compilers.
Einer privaten Immobilie ist implementiert als eine regelmäßige Eigenschaft, und der code außerhalb der Klasse nicht zugreifen darf es.
Etwas zu machen, wirklich private innerhalb der Klasse, kann es nicht sein, ein Mitglied der Klasse, wäre es eine lokale variable innerhalb einer Funktion Gültigkeitsbereich innerhalb des Codes erzeugt das Objekt. Das würde bedeuten, dass Sie können nicht auf es sich wie ein Mitglied der Klasse, also den
this
Stichwort.this
Schlüsselwort.classname.member
, aber seit seiner privat-Sie möchte es nicht möglich sein, auf die Konstruktor-Funktion (classname). Dennoch, es kann immer noch zugegriffen werden, die durch die Erweiterung des Moduls. Also ich denke, es ist nutzlos 🙂JavaScript unterstützt private Variablen.
In Maschinenschrift, würde dies ausgedrückt werden, etwa so:
BEARBEITEN
Diese Vorgehensweise sollte nur verwendet werden, SPARSAM, wo es absolut notwendig ist. Zum Beispiel, wenn Sie brauchen, um cache ein Passwort vorübergehend.
Gibt es Leistung Kosten wenn Sie dieses Muster verwenden (unabhängig von Javascript-oder Maschinenschrift) und sollte nur dort verwendet werden, wo Sie absolut notwendig ist.
var _this
für den Einsatz im Gültigkeitsbereich von Funktionen? Warum hätten Sie Skrupel, es zu tun auf der Gültigkeitsbereich der Klasse?Einmal Unterstützung für WeakMap ist weiter verbreitet es ist eine interessante Technik, die detailliert in Beispiel #3 hier.
Es ermöglicht, private Daten UND vermeidet die Leistungsanforderungen von Jason Evans Beispiel, indem die Daten aus zugegriffen werden Prototyp-Methoden statt, nur Instanz-Methoden.
Den verlinkten MDN WeakMap Seite listet browser-Unterstützung in Chrome 36, Firefox 6.0, IE 11, Opera 23 und Safari 7.1.
protected
Parameter? 😀Dank Sean Feldman für den link zu der offiziellen Diskussion zu diesem Thema - siehe seine Antwort für den link.
Lese ich die Diskussion, die er im Zusammenhang mit, und hier ist eine Zusammenfassung der wichtigsten Punkte:
this
ohne irgendeine Art von Abhilfe@private
so minifiers, dass erkennen, dass die annotation kann effektiv verkleinern die Methode NamenInsgesamt gegenargumenten hinzufügen Sichtbarkeit Unterstützung bei der ausgegebene code:
In Maschinenschrift, Private Funktionen sind nur zugänglich innerhalb der Klasse. Wie
Und es zeigt eine Fehlermeldung, wenn Sie versuchen, Zugriff auf private member. Hier ist das Beispiel:
Ich weiß, dies ist eine ältere Diskussion, aber es könnte immer noch nützlich sein, um meine Lösung für das problem der vermeintlich private Variablen und Methoden in einem Typoskript "undicht" in die öffentliche Schnittstelle der kompilierte JavaScript-Klasse.
Mir dieses Problem ist rein kosmetischer Natur, d.h. es geht um die übersichtlichkeit, wenn eine Instanz-variable wird betrachtet, DevTools. Mein fix ist für die Gruppe der private-Deklarationen zusammen, die innerhalb einer anderen Klasse wird dann instanziiert, in der Haupt-Klasse und der Zuweisung zu einem
private
(aber immer noch öffentlich sichtbar in JS-variable mit einem Namen wie__
(doppelter Unterstrich).Beispiel:
Wenn die
myClass
Instanz angesehen werden, die in DevTools, statt zu sehen, alle seine "private" - Mitglieder, vermischt mit einer wirklich öffentlichen Netzen (die sich optisch sehr unordentlich ordentlich umgestaltet real-life-code) man sieht Sie ordentlich gruppiert innerhalb der eingestürzten__
Eigenschaft: