es6 grundlegende Grammatik in der Klasse

Das Konzept für die Klasse den Hintergrund tun sollten sehr vertraut mit, JavaScript-Klassen für eine Vielzahl von anderen objektorientierten Sprache Unterschiede, kann nur den Konstruktor verwenden, um eine Instanz Objekt zu erzeugen. Um die traditionelle Sprache zuzugreifen, eingeführt ES6 eine Klasse wie dieses Konzept, durch das Schlüsselwort class Kategorie definiert.

Klasse ist eigentlich ein syntaktischer Zucker, fast alle Funktionen auf andere Weise erreicht werden können, nur um den Code klar, wie die objektorientierte Programmierung.

Syntax:

class User{  

  constructor(){ console.log('默认调用'); } eat(){ console.log('eat方法'); } } var user = new User();//默认调用 user.eat()//eat方法 

Beachten Sie, dass Klassenmethoden können nicht durch ein Komma getrennt werden, oder werden Fehler zwischen der Funktion keine Keywords und Methoden hinzufügen können. Alle Methoden sind in der Prototypen-Klasse-Methode der Klasse definiert. In der Instanz der Klasse ist es, ein Verfahren auf dem Prototyp Methodenaufruf zu nennen.

class User{  

  eat(){} } 

Es ist äquivalent zu:

function User() {} User.prototype.eat = function () {} 

Interne Klasse definiert Methoden sind nicht abzählbar, die nicht das gleiche mit ES5 ist.

Constructor-Methode:

Dies ist die Standardmethode eine neue Instanz eines Objekts zu erzeugen, wenn automatisch durch, genannt für jede Klasse haben wird, wenn sie nicht explizit definiert, fügt automatisch einen Null-Konstruktor. Standard gibt eine Instanz eines Objekts, das dieses ist. Sie können auch das andere Objekt zurück, das das gleiche wie bei dem Konstruktor ist. Klasse muss den neuen Anruf verwenden, und wir können als Konstruktor-Methode direkt aufgerufen.

Und ES5 als Attribut Instanz , es sei denn explizit definiert in und von sich selbst ( das heißt, dieses Objekt in a) definiert, oder auf einem Prototyp definiert ( das heißt in der Klasse definiert), werden alle Instanzen einer Klasse teilen sich die Prototypobjekt und damit eine Instanz Objekte durch Prototyp Proto rewrote der Prototyp, werden alle Instanzen eines Objekts ändern, nicht für alle Instanzen der empfohlenen Proto umschreiben den Prototyp.

Die gleiche, Getter-Funktion und eine Set-Funktion können auch in den Schlüsselwort verwendet werden, erhalten und innerhalb der Klasse festgelegt:

class User{  

  constructor(){ this.name = 'wade'; } get eat(){ return '这是get'; } set eat(val){ console.log('set调用了'); } } var user = new User(); user.eat = 3//set调用了 console.log(user.eat);//这是get 

Ausdrücke:

Eigenschaften können [] Ausdruck, dies ist das gleiche mit Objekten, Klassen können auch direkt durch den Ausdruck definiert werden:

var val = 'my'

var User = class Muser{ [val](){ } } 

Muser ist nur innerhalb der Klasse, Klasse externen Gebrauch Benutzer. Wenn die internen nicht verwendet wird, oder kann sofort ausführen Muser Klasse weggelassen werden:

var User = class {} var user = new class{}() 

Zu beachten Sie, ist die Standardklasse Strict-Modus, sondern verbessern auch die Variable nicht existiert, die Attributnamen nach dem Klassennamen der Klasse Schlüsselwort zurückgegeben wird, können Sie auch Gernerator Methode verwenden. Interne Standard Instanz dieser Klasse Methoden Klasse gerichtet, trennen Fehler verwenden.

Vor der Klasse mit dem Schlüsselwort static Methode, diese Methode nicht Instanz vererbt werden kann, indem die Klasse aufrufen, wird diese Methode statische Methode aufgerufen:

class User{  

  static eat(){ console.log('eat'); } }var user = new User(); console.log(user.eat());//报错 User.eat()//eat 

Wenn die statische Methode enthält dieses Schlüsselwort, das bedeutet, dass diese Klasse anstelle einer Instanz:

class User{  

  static eat() { this.say(); } static say() { console.log('hello'); } say() { console.log('world'); } } User.eat() // hello 

Statische Methoden und nicht-statische Methode kann auch doppelte Namen. Statische Methoden können von den Unterklassen vererbt werden.

Zusätzlich Instanzeigenschaften im Konstruktor innen zu definieren, sondern auch direkt auf der obersten Ebene definiert ist:

class User1{  

  constructor(){ this.name = 'wade'; } } class User2{ name = 'kobe'; } console.log(new User1().name);//wade console.log(new User2().name);//kobe 

Class-Eigenschaft selbst ist eine statische Klasse Eigenschaft, Class.propName genannt, ist nicht definiert Eigenschaften für eine Objektinstanz dafür. Interne Klasse statische Methoden nicht nur statische Eigenschaften, ist jetzt nur noch ein Schreiben:

class User {}; User.prop = 1;

Aber es gibt einen Vorschlag zur Verwendung statischer Definition:

class User{  

  static prop = 1; }; 

Organisationsprinzipien und Erklärungen aus der Code-Sicht ist die Formulierung besser zweifellos.

Wir alle wissen, das Code Paket Privateigentum und private Methoden sind sehr wichtig, aber ES6 die Klasse nicht angeboten wird. Alternative Lösungen wie Scheidungsname, Modul zur Entfernungsmethode und dergleichen mit einem variablen Symbol. Aber nicht sehr gut. Jetzt gibt es einen Vorschlag # zu verwenden, das Privateigentum zur Verfügung zu stellen:

class User{  

  #prop = 1;    

  #eat(){} }; 

Kann nur intern, extern zugänglich auf dem Fehler verwendet werden. Privatbesitz kann auch Set-Getter und Setter-Methoden sein. Private Attribute aus dem dieser Referenz ist nicht darauf beschränkt, solange das Innere der Klasse können Instanz verwiesen private Attribute werden:

class User{  

  #prop = 1;  

  static eat(user){ console.log(user.#prop); } }; User.eat(new User());//1 

neue Instanz des Objekts ist einen Befehl von dem Konstruktor zu erzeugen. ES6 Einführung einer neuen Befehl new.target Eigenschaft, die in der Regel im Konstruktor verwendet wird, gibt den neuen Befehl zu dem Effekt, dass der Konstruktor. Wenn der Konstruktor nicht ein neuer Befehl oder durch Reflect.construct () -Aufruf ist, kehrt new.target undefiniert, so dass diese Eigenschaft verwendet werden kann, um zu bestimmen, wie der Konstruktor aufgerufen wird:

function User() { console.log(new.target === User);//true console.log(new.target !== undefined);//true } var user = new User(); 

Wenn es nicht neu:

function User() { console.log(new.target === User);//false console.log(new.target !== undefined);//false } User(); 

Klasse interner Anruf new.target, gibt die aktuelle Klasse:

class User{  

  constructor(){ console.log(new.target === User)//true } } new User(); 

Wenn die Unterklasse der übergeordneten Klasse erbt, wird new.target eine Unterklasse zurück. Mit dieser Funktion können Sie schreiben, können unabhängig voneinander nicht verwendet werden, nach dem Unterricht muss erben können.



https://www.jianshu.com/p/20acc1080831

Ich denke du magst

Origin www.cnblogs.com/1833lljy/p/12576103.html
Empfohlen
Rangfolge