Closure-Implementierung privater Variablen Private Variablen werden nicht geteilt Durch das neue Schlüsselwort verweist this im Personenkonstruktor auf Tom, öffnet einen neuen Bereich und führt alle Schritte erneut aus. Klasse Person{ Konstruktor(Name){ sei _num = 100; dieser.name = Name; dies.getNum = Funktion(){ gibt _num zurück; } diese.addNum = Funktion(){ return ++_num } } } const tom = neue Person('tom') const jack = neue Person('jack') tom.addNum() konsole.log(tom.getNum()) //101 konsole.log(jack.getNum()) //100 Private Variablen können geteilt werden Um zu vermeiden, dass für jede Funktion eine neue private Variable generiert wird, was zu dem Problem führen würde, dass einige Variablen nicht gemeinsam genutzt werden können, können wir diese private Variable außerhalb des Klassenkonstruktors platzieren und diese Variable weiterhin über eine Closure zurückgeben. const Person = (Funktion () { sei _num = 100; Rückgabeklasse _Person { Konstruktor(Name) { dieser.name = Name; } addNum() { return ++_num } getNum() { returniere _num } } })() const tom = neue Person('tom') const jack = neue Person('jack') tom.addNum() konsole.log(tom.getNum()) //101 konsole.log(jack.getNum()) //101 In diesem Fall können Sie, wenn die beiden Methoden gemischt werden, über zwei Arten von privaten Variablen verfügen: gemeinsam nutzbare und nicht gemeinsam nutzbare. Nachteile: Während der Instanziierung werden viele Kopien hinzugefügt, was mehr Speicher verbraucht. Symbol implementiert private Variablen der Klasse Symboleinführung: Erstellen Sie einen eindeutigen Wert. Nicht alle Symbole sind gleich. Wenn Sie ein Symbol erstellen, können Sie ihm ein Beschreibungssymbol („desc“) hinzufügen. Derzeit unterstützt der Schlüssel des Objekts auch Symbole. Konstantname = Symbol('Name') const person = { // Klassenname [Name]: 'www', sagen(){ console.log(`Name ist ${this[name]} `) } } person.sagen() console.log(Name) Der mithilfe von Symbol für das Objekt erstellte Schlüssel kann von JSON nicht iteriert und serialisiert werden. Seine Hauptfunktion besteht daher darin, dem Objekt einen eindeutigen Wert hinzuzufügen. Symbolische private Variablen der Implementierungsklasse Es wird empfohlen, zum Erstellen einer Referenz auf ein Symbol Closures zu verwenden, damit Sie diese Referenz im Methodenbereich der Klasse abrufen können. Dadurch wird vermieden, dass alle Methoden im Konstruktor geschrieben werden und bei jeder Erstellung einer neuen Instanz Speicherplatz für die Zuweisung von Methoden zugewiesen wird, was zu Speicherverschwendung führt. const Person = (Funktion () { let _num = Symbol('_num: private Variable'); Rückgabeklasse _Person { Konstruktor(Name) { dieser.name = Name; dies[_num] = 100 } addNum() { gibt ++diese[_num] zurück } getNum() { gib dies zurück[_num] } } })() const tom = neue Person('tom') const jack = neue Person('jack') konsole.log(tom.addNum()) //101 konsole.log(jack.getNum()) //100 Erstellen privater Variablen über WeakmapÜber MDN erreichen:const Parent = (Funktion () { const privates = neue WeakMap(); returniere die übergeordnete Klasse { Konstruktor() { const ich = { Daten: „Private Daten kommen hierhin“ }; privates.set(das, ich); } getP() { const me = privates.get(dies); gib mich zurück } } })() lass p = neues übergeordnetes Element() konsole.log(p) Konsole.log(p.getP()) ZusammenfassenZusammenfassend lässt sich sagen, dass die Weakmap-Methode Speicher spart, leicht wiederverwendet werden kann und mit mehr Browsern kompatibel ist. Dies ist auch die am meisten empfohlene Implementierungsmethode. Damit ist dieser Artikel über verschiedene Möglichkeiten zum Schreiben privater Variablen in ES6-Implementierungsklassen abgeschlossen. Weitere Informationen zu privaten Variablen in ES6-Klassen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Teilen Sie 9 Linux Shell Scripting Tipps für die Praxis und Interviews
>>: Eine kurze Erläuterung der Manifestation und Wertauswahlmethode von innodb_autoinc_lock_mode
1. Ändern Sie die Hardwareversion der virtuellen ...
Inhaltsverzeichnis MySQL-Einschränkungsoperatione...
Inhaltsverzeichnis Vorwort Browser kompilierte Ve...
1. Dynamisches Laden von Skripten Mit der wachsen...
TeamCenter12 gibt das Kontokennwort ein und klick...
Überprüfen Sie, ob MySQL bereits unter Linux inst...
<br />Originaltext: http://andymao.com/andy/...
1. Entwicklungsumgebung vue 2. Computersystem Win...
Inhaltsverzeichnis brauchen Kernidee Zwei Möglich...
Inhaltsverzeichnis 1. Standardmäßig anzeigen und ...
Als ich vor ein paar Tagen ein Programm schrieb, w...
Inhaltsverzeichnis Schnellstart Anwendung Grundpr...
Drei Wissenspunkte: 1. CSS-Nachkommenselektor htt...
Dieser Artikel enthält hauptsächlich Lösungen für...
Inhaltsverzeichnis 1. Master-Slave-Replikation Ma...