Schauen wir uns zunächst ein Beispiel an
function Me(name,age,job){ this.name = name; this.age = age; this.job = job; }
Was ist der Unterschied zwischen den folgenden beiden Methoden zum Instanziieren von Objekten?
var mefun1 = new Me('fei','20','it'); var mefun2 = Me('fei','20','it');
Einfach gesagt
Die erste ist die Konstruktorfunktion, dh der Aufruf der Konstruktorfunktion über den neuen Operator, um eine Funktion zu erstellen
Die zweite Methode ist keine Instanziierung, sondern ruft lediglich die Funktion auf und weist der Variablen den Rückgabewert zu.
Erweitern Sie es erneut
In JavaScript gibt es keine echten Klassen, aber Konstruktoren und neue Operatoren in JavaScript. Der Konstruktor wird verwendet, um die Eigenschaften und Werte des Instanzobjekts zu initialisieren. Als Konstruktor kann jede JavaScript-Funktion verwendet werden, und dem Konstruktor muss der neue Operator vorangestellt werden, um eine neue Instanz zu erstellen.
Dernew-Operator ändert den Ausführungskontext der Funktion und auch das Verhalten der Return-Anweisung. Tatsächlich ist die Verwendung von neuen und Konstruktoren sehr ähnlich zu traditionellen Sprachen, die Klassen implementieren:
// 实例化一个Me var alice = new Me('alice', 18, 'Coder'); // 检查这个实例 assert( alice instanceof Me );
Bei der Benennung von Konstruktoren wird normalerweise die Groß-/Kleinschreibung verwendet, wobei der erste Buchstabe groß geschrieben wird, um ihn von gewöhnlichen Funktionen zu unterscheiden. Dies ist
Eine idiomatische Verwendung.
// 不要这么做! Me('alice', 18, 'Coder'); //=> undefined
Diese Funktion gibt nur undefiniert zurück, und der Ausführungskontext ist das Fensterobjekt (global), und drei globale Variablen namens, Alter und Job werden versehentlich erstellt. Verlieren Sie beim Aufruf des Konstruktors nicht das Schlüsselwort new.
Wenn der Konstruktor mit dem Schlüsselwort new aufgerufen wird, ändert sich der Ausführungskontext vom globalen Objekt (Fenster) in einen leeren Kontext, der die neu generierte Instanz darstellt. Daher verweist das Schlüsselwort this auf die aktuell erstellte Instanz. Auch wenn das Verständnis etwas verwirrend ist, gilt das Gleiche auch für die Implementierung integrierter Klassenmechanismen in anderen Sprachen.
Wenn Ihr Konstruktor standardmäßig nichts zurückgibt, gibt er dies zurück – den aktuellen Kontext.
Andernfalls wird ein beliebiger nicht-primitiver Typwert zurückgegeben.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.