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. Um die Abfrage zu optimieren, sollten Sie voll...
Dies ist eine Website, die ich nachgeahmt habe, a...
Spring-Integration mit SpringMVC Die web.xml-Konf...
Frage Kürzlich musste ich mich bei einem privaten...
In letzter Zeit ist das Abrufen von Docker-Images...
Dieser Artikel fasst einige einfache Prinzipien d...
Zwei Methoden zur Implementierung der Mysql-Remot...
Ich habe heute Abend ein Problem gelöst, das mich...
Wenn Benutzer MySQL-Datenbanken zum ersten Mal in...
Wenn Sie 5 Datensätze in Tabelle1 einfügen möchte...
I. Einleitung Die Docker-Technologie erfreut sich...
In diesem Artikel wird der spezifische JS-Code zu...
Vorwort Das Docker-Image kann nicht gelöscht werd...
Beim Produktdesign legen Designer Wert darauf, das...
(I) Installation von mysql5.7: ❀ Details: Die Ins...