Detaillierte Erläuterung mehrerer Möglichkeiten zum Schreiben privater Variablen der ES6-Implementierungsklasse

Detaillierte Erläuterung mehrerer Möglichkeiten zum Schreiben privater Variablen der ES6-Implementierungsklasse

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.
Sie können jedoch getOwnProporitySymbols() verwenden, um das Symbol abzurufen.
Nachteile: Die neue Syntax ist nicht weitgehend mit Browsern kompatibel.

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())

Zusammenfassen

Zusammenfassend 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:
  • Detaillierte Erläuterung der Implementierung privater Variablen in der ES6-Reihe

<<:  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

Artikel empfehlen

Vue implementiert eine kleine Wettervorhersageanwendung

Dies ist eine Website, die ich nachgeahmt habe, a...

Lösen Sie das Problem des Mac Docker x509-Zertifikats

Frage Kürzlich musste ich mich bei einem privaten...

Lösung für das Docker-Pull-Timeout

In letzter Zeit ist das Abrufen von Docker-Images...

Einfache Prinzipien für die Gestaltung des Webseiten-Layouts

Dieser Artikel fasst einige einfache Prinzipien d...

Zwei Methoden zur Implementierung der Mysql-Remoteverbindungskonfiguration

Zwei Methoden zur Implementierung der Mysql-Remot...

Div in HTML ausblenden Tabelle ausblenden TABLE- oder DIV-Inhalt im CSS-Stil

Ich habe heute Abend ein Problem gelöst, das mich...

So ändern Sie das Anfangskennwort eines Benutzers in mysql5.7

Wenn Benutzer MySQL-Datenbanken zum ersten Mal in...

Implementierung der Docker-Bereitstellung von Django+Mysql+Redis+Gunicorn+Nginx

I. Einleitung Die Docker-Technologie erfreut sich...