0

Ich höre immer wieder, dass einer der Gründe, weshalb JavaScript eine so überlegene Sprache ist, darin liegt, dass es keine Klassen hat. Stattdessen hat es dieses magische Ding namens Prototypische Vererbung.Wie ist Konstruktorfunktion + Prototyp nicht das Gleiche wie eine Klasse?

Korrigieren Sie mich Wenn ich falsch liege, aber von dem, was ich verstehe, Object.prototype und Object.prototype.constructor (die einige native Code ausführt) sind die beiden grundlegenden Elemente in Javascript. Wie unterscheidet sich das von einer Klasse?

Was muss jede Funktion haben .prototype, wenn sie keinen "Blueprint" für die Objekterstellung haben, wenn sie mit dem Operator new aufgerufen wird?

+1

Mögliches Duplikat von [prototypbasierte gegen klassenbasierte Vererbung] (http://stackoverflow.com/questions/816071/prototype-based-vs-class-based-inheritance) –

+1

Nette Frage. Sie beschreiben genau, wie TypeScript ES6-Klassen übernimmt und sie zu ES5 kompiliert. Sie sind unsere beste Wette für jetzt. Wenn Sie auf die Ausgabe JS-Klassen schauen, werden Konstruktorobjekte zu "object.prototype.something" – BenRacicot

+1

Wo hören Sie das? Das sind bizarre Behauptungen. –

Antwort

0

Diese Frage kann zu einer sehr tiefen Diskussion führen, wenn Sie genug graben, aber die einfachste Metapher (eine weit verbreitete), die ich denken kann, ist eine "Klasse" als Blaupause und ein "Objekt" als Haus zu denken . In einem klassenbasierten System können Sie Häuser aus einem Bauplan "bauen" (instanziieren). Und Sie können in diesen Häusern "leben" (Methoden anrufen usw.). Aber du kannst nicht in den Bauplänen "leben". Sie dienen ausschließlich dem Bau von Häusern.

In JS haben Sie keine Blaupausen. Du hast nur Häuser. Sie können die Häuser kopieren und darin "leben" und jedes anders machen, wenn Sie es wünschen (Einzelstaat, usw.). Aber sie sind alle Kopien von einander. Es gibt keinen Blueprint.

+3

und wenn Sie einen Pool zum Elternhaus hinzufügen, bekommen alle Kinderhäuser einen Pool – maioman

+4

@maioman: Nur das Elternhaus bekommt einen Pool. Die Kinderhäuser nutzen den Pool ihrer Eltern. –

+0

@Eric Sie sollten wahrscheinlich erklären, dass bei der prototypischen Vererbung kein tatsächliches Kopieren erfolgt. Ihr zweiter Absatz scheint darauf hinzuweisen, dass jedes Objekt, das von einem anderen Objekt erbt, eine tatsächliche Kopie dieses geerbten Objekts erhält. –

Verwandte Themen