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

JS-Prinzip der asynchronen Ausführung und Rückrufdetails

1. JS-Prinzip der asynchronen Ausführung Wir wiss...

Beispielcode zur Implementierung der Alipay-Sandbox-Zahlung mit Vue+SpringBoot

Laden Sie zunächst eine Reihe von Dingen aus der ...

Detaillierte Erklärung der Concat-bezogenen Funktionen in MySQL

1. concat()-Funktion Funktion: Mehrere Zeichenfol...

Beschreiben Sie kurz den Unterschied zwischen MySQL und Oracle

1. Oracle ist eine große Datenbank, während MySQL...

Eine dauerhafte Lösung für MySQLs Unfähigkeit, Chinesisch zu erkennen

In den meisten Fällen unterstützt MySQL Chinesisc...

Drei Prinzipien effizienten Navigationsdesigns, die Webdesigner kennen müssen

Das Entwerfen der Navigation für eine Website ist...

Der Unterschied zwischen JS-Pre-Parsing und Variablen-Promotion im Web-Interview

Inhaltsverzeichnis Was ist eine Voranalyse? Der U...

Analyse der MySql CURRENT_TIMESTAMP-Funktion anhand eines Beispiels

Beim Erstellen eines Zeitfelds STANDARD CURRENT_T...

CnBlogs - Teilen im benutzerdefinierten Blogstil

Nachdem ich die halbe Nacht daran gearbeitet hatt...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...