16 Stimmen

Warum wurde JavaScript mit prototypischer Vererbung implementiert?

Es gibt viele Artikel und Beiträge, die erklären, wie JavaScript Vererbung funktioniert, aber warum wurde JavaScript mit prototypischen Vererbung anstelle der klassischen Vererbung implementiert?

Ich liebe JavaScript, also sage ich nicht, dass es etwas Schlechtes ist... Ich bin nur neugierig.

18voto

dshaw Punkte 2119

Hier ist, was Brendan Eich zu den Ereignissen zu sagen hat: https://brendaneich.com/2008/04/popularity/

Wie ich schon oft gesagt habe und wie andere bei Netscape bestätigen können, wurde ich bei Netscape mit dem Versprechen angeworben, im Browser "Scheme" zu machen. Zumindest das Client Engineering Management, darunter Tom Paquin, Michael Toy und Rick Schell, sowie ein gewisser Marc Andreessen waren davon überzeugt, dass Netscape eine Programmiersprache in Quellform in HTML einbetten sollte.

Das Diktat der obersten technischen Leitung lautete, dass die Sprache "wie Java" aussehen müsse. Das schloss Perl, Python und Tcl aus, ebenso wie Scheme.

Ich bin nicht stolz darauf, aber ich bin froh, dass ich Scheme-ish first-class functions und Self-ish (wenn auch singuläre) Prototypen als Hauptbestandteile gewählt habe. Die Java-Einflüsse, insbesondere die Date-Bugs des Jahrtausends, aber auch die Unterscheidung zwischen Primitiven und Objekten (z. B. String vs. String), waren unglücklich.

9voto

noah Punkte 20711

JavaScript sollte ursprünglich Lisp sehr ähnlich sein. Auch nachdem die Syntax geändert wurde, um C/Java näher zu kommen, ist es immer noch Lisp im Gewand von C . Ich denke, die Antwort liegt in den Ursprüngen der funktionalen Programmierung. In reiner FP gibt es keinen veränderbaren Zustand, was bedeutet, dass es keine veränderbaren Objekte gibt. Wenn man die Regeln ein wenig lockert und ein wenig kreativ wird, erhält man so etwas wie protypische Vererbung, d.h. man kann Objekte erweitern, aber das ursprüngliche Objekt nicht verändern. Es bietet die gleiche Leistung wie die Vererbung und gibt Ihnen immer noch eine gewisse Unveränderlichkeit.

Schließlich drehen Sie die Sprache so, dass sie wie C++ und Java aussieht, und schon haben Sie new someFunction() und der Rest ist Geschichte.

6voto

Christoph Punkte 157217

Denn sie wurde stark von Self beeinflusst. Sowohl Wikipedia als auch die ECMA-Spezifikation erwähnen dies.

1voto

x4u Punkte 13497

Ich denke, sie wurde gewählt, weil sie einfach zu implementieren ist, keine zusätzlichen Schlüsselwörter benötigt und die Benutzer sie nicht verstehen müssen, um die Sprache verwenden zu können. Außerdem ist sie leistungsfähiger und flexibler als die klassenbasierte Vererbung.

Es ist eine natürliche Wahl für eine nicht typisierte Sprache. Die Hauptvorteile der klassenbasierten Vererbung bestehen darin, dass sie statische Typisierung und damit Typüberprüfung und eine schnellere tabellenbasierte Nachschlageimplementierung ermöglicht.

1voto

pestilence669 Punkte 5568

Die prototypische Vererbung (mit Schließungen) ermöglicht es anderen, Dinge zu tun, die nie geplant waren. Es ist die Verflechtung mehrerer Paradigmen, die zusammen gekommen sind, um eine Allzweckprogrammierung zu erreichen.

Mit einer Prototypensprache können Sie "Mix-ins" für Ihre Klassen verwenden. Sie können das gewünschte Maß an Kapselung erreichen, ohne sprachspezifische Schlüsselwörter. Kurz gesagt, Prototypsprachen sind großartig.

Ich sage es nur ungern, aber JavaScript und einige Bibliotheken können alles, was ich brauche. Es war subversiv in seiner Entwicklung (es sollte Java untergeordnet werden). Es hat viel Macht, in der einfachsten der Implementierungen.

Wenn Sie genug studieren und herumspielen, werden Sie die Vorteile der Inspiration erkennen. JavaScript ist eine der wenigen Sprachen, die ihr Potenzial absichtlich "versteckt" haben. Man muss sich mit der Politik beschäftigen, wenn man das "Warum" wissen will. Aber genau aus diesem Grund ist sie so großartig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X