2016-12-17 4 views
5

Ich beginne in ES6 mit Hintergrund in JavaScript. Ich habe eine Frage. Ich habe eine ES6 Klasse wie folgt aus:Äquivalent des Prototyps in ES6

class User{ 
constructor(){ 
} 

doSomething(){ 
} 
} 

Meine Fragen ist nicht doSomething Methode jedes Mal erstellt erhalten instanziiert wir dieses Objekt? In früheren JS konnten wir doSomething herausnehmen und es mit "Prototyp" erstellen, um sicherzustellen, dass doSomething einmal erstellt wird, nicht jedes Mal, wenn wir das Objekt instanziieren. Ich bin mir jedoch sicher, dass es den richtigen Weg gibt, den gleichen Effekt in ES6 zu erzielen. Jede Hilfe wäre willkommen.

Antwort

10

Meine Fragen wird "doSomething" Methode jedes Mal erstellt, wenn wir dieses Objekt instanziieren?

Nein. Die class Syntax ist mehr oder weniger nur syntactic sugar für Konstruktor-Funktion + Prototyp. I.e. das Ergebnis ist (fast) entspricht:

function User() {} 
User.prototype.doSomething = function() { }; 

Blick auf das Ergebnis Chrome produziert:

enter image description here

Ich bin aber beachten Sie, dass über den richtigen Weg, um die gleiche Wirkung in erreichen ES6.

Wie gesagt, class macht das für Sie. Der ganze Sinn der Einführung von class ist, das Erstellen von Konstruktorfunktionen und das Setzen von Methoden auf prototype einfacher zu machen (daher syntaktischer Zucker).


Wenn Sie mehr erfahren mögen, haben einen Blick auf

  • MDN - Classes

    JavaScript in ECMAScript eingeführten Klassen 6 ist syntaktischer Zucker über JavaScript bestehenden Prototyp-basierte Vererbung. Die Klassensyntax lautet und nicht, wodurch ein neues objektorientiertes Vererbungsmodell für JavaScript eingeführt wird. JavaScript-Klassen bieten eine viel einfachere und klarere Syntax zum Erstellen von Objekten und zum Umgang mit Vererbung.

  • YDKJS - ES6 & Beyond

+0

Es ist erwähnenswert, dass einige Leute "Klasse" als [syntaktisches Gift] ansehen (https://github.com/joshburgess/not-awesome-es6-classes). – 4castle

+3

@ 4castle: Das ist Meinung und irrelevant zu der Frage. –

+0

Es ist relevant, weil das OP fragt nach der "richtigen" Art, es in ES6 zu tun, was bedeutet, dass Sie beide Seiten des Arguments zeigen sollten. – 4castle

2

Absolut nicht. Es scheint keine bindende Methode mehr zu sein, manuell in ES6 zu prototypieren, aber Tatsache ist, dass ES6 uns hilft, dies im Hintergrund zu tun.
Wie MDN sagt:

JavaScript-Klassen in ECMAScript 6 eingeführt syntaktischer Zucker über JavaScript bestehenden Prototyp-basierte Vererbung sind. Die Klassensyntax führt kein neues objektorientiertes Vererbungsmodell für JavaScript ein. JavaScript-Klassen bieten eine viel einfachere und klarere Syntax zum Erstellen von Objekten und zum Umgang mit Vererbung.

Verwandte Themen