er wahrscheinlich der Moment, nachdem tun dies bedeutete, wird die addMethod für alle grundlegenden
Objekte
Objekttypen wie String, Anzahl etc. Dies liegt daran, dass die String-Objekt eine Funktion (aber Objekte, die von String erstellt wurden, sind nicht).
ZB gegeben
var s = '';
Sie
tun können
String.addMethod(...);
aber nicht
s.addMethod(...);
Eine kurze Erklärung des Typs System JavaScript kommt hier:
JavaScript tut nicht haben das normale Konzept von Klassen. Stattdessen können Sie etwas Ähnliches erreichen, indem Sie jede Funktion in einen Konstruktor umwandeln, indem Sie das neue Schlüsselwort davor setzen, wenn es aufgerufen wird.
Z. B: gegeben
function MyFunction(x) { this.myX = x; }
, wenn Sie es aufrufen, wie
var myObj = new MyFunction(10);
wird es ein Objekt erstellen, genannt myObj. Dieses Objekt wird eine einzelne Mitgliedsvariable namens myX haben. Die Funktion MyFunction wird als Konstruktor des Objekts betrachtet (und in der Eigenschaft "constructor" gespeichert.
(Bonusfrage: Was passiert, wenn Sie die obige Funktion ohne das neue Schlüsselwort aufrufen, zB var x = MyFunction(10)
. Die Antwort wird wahrscheinlich überrasche jede vernünftige Person.)
Jetzt hast du gesehen, wie jede beliebige Funktion in einen Konstruktor umgewandelt werden kann.Die eingebauten Objekte sind genau gleich, Stringobjekte werden von der Funktion String erzeugt, Zahlen werden von der Funktion erzeugt Nummer usw.
Genau wie diese eingebauten Objekte durch Funktionen erzeugt werden, wird jede dieser Funktionen auch von der "Funktion" -Funktion erstellt (yikes!).
Jetzt zu den Prototypen.
in dem obigen Beispiel, wenn Sie irgendwo
schreiben
MyFunction.prototype.someNewMethod = function() {}
alle vom MyFunction Konstruktor erstellte Objekte/Funktion erscheint eine zusätzliche Member-Funktion haben someNewMethod genannt. Sie können viele andere flippige Dinge mit Prototypen machen, wie das Ersetzen des Prototyps oder das Ersetzen des Prototyps des Prototyps, aber ich bin kein Experte darin.
Nein, es ist JavaScript-Implementierung der Prototyp-Vererbung, die albern ist. Sein seltsamer using-Function-as-Constructor-Stil bietet Ihnen keinen der potenziellen Vorteile von Prototypen und unterscheidet sich trotzdem grundlegend von der klassenbasierten Vererbung, die die meisten Programmierer verstehen. Es ist schön, genau zu verstehen, was JavaScript-Prototypen tun, aber erwarten Sie keine Epiphanie, die es offensichtlich macht, warum dieses Modell sinnvoll ist. Weil es nicht so ist. – bobince