Heim > Web-Frontend > js-Tutorial > Hauptteil

Hinweise zur Javascript-Studie – Funktionen (5): Constructor_Basic Knowledge

WBOY
Freigeben: 2016-05-16 16:30:33
Original
1155 Leute haben es durchsucht

Konstruktoren in Javascript unterscheiden sich auch von denen anderer Sprachen. Jede mit dem Schlüsselwort new aufgerufene Funktion kann als Konstruktor verwendet werden.
Innerhalb des Konstruktorkörpers zeigt dies auf das neu erstellte Objekt. Wenn im Konstruktorkörper kein Rückgabeausdruck angezeigt wird, geben wir standardmäßig diesen zurück, bei dem es sich um das neu erstellte Objekt handelt.

Code kopieren Der Code lautet wie folgt:

Funktion Foo() {
This.bla = 1;
}
Foo.prototype.test = function() {
console.log(this.bla);
};
var test = new Foo();

Der obige Code ruft Foo als Konstruktor auf und verweist den Prototyp (__proto__) des neuen Objekts auf Foo.prototype.
Wenn wir den Rückgabeausdruck innerhalb des Konstruktors definieren, gibt der Konstruktor den gesamten Ausdruck zurück, aber dieser Rückgabeausdruck muss ein Objekt sein.

Code kopieren Der Code lautet wie folgt:

Funktion Bar() {
Rückgabe 2;
}
new Bar(); // ein neues Objekt
Funktion Test() {
This.value = 2;
Geben Sie {
zurück foo: 1
};
}
new Test(); // das zurückgegebene Objekt

Wenn new weggelassen wird, kann die Funktion kein neues Objekt zurückgeben.

Code kopieren Der Code lautet wie folgt:

Funktion Foo() {
This.bla = 1; // wird auf das globale Objekt gesetzt
}
Foo(); // undefiniert

Das obige Beispiel funktioniert möglicherweise auch in einigen Szenarien, aber aufgrund des Funktionsmechanismus in Javascript verweist es auf das globale Objekt.

Werksmodus

Um auf das Schlüsselwort new verzichten zu können, müsste der Konstruktor explizit einen Wert zurückgeben.

Code kopieren Der Code lautet wie folgt:

Funktion Bar() {
var-Wert = 1;
Geben Sie {
zurück Methode: function() {
              Rückgabewert;
}
}
}
Bar.prototype = {
foo: function() {}
};
new Bar();
Bar();

Im obigen Beispiel ist der Effekt des Aufrufs der Funktion Bar ohne Verwendung von new derselbe. Ein neu erstelltes Objekt, das die Methode method enthält, ist tatsächlich ein Abschluss.
Hierbei ist zu beachten, dass new Bar() nicht Bar.prototype, sondern das Prototypobjekt der Funktionsmethode innerhalb des Rückgabeausdrucks zurückgibt.
Im obigen Beispiel gibt es keinen funktionalen Unterschied zwischen der Verwendung von new und nicht.

Neue Objekte durch Fabrikmuster erstellen

Wir werden oft daran erinnert, kein neues Produkt zu verwenden, da das Vergessen der Verwendung zu Fehlern führt.
Um ein Objekt zu erstellen, verwenden wir vorzugsweise das Factory-Muster und konstruieren ein neues Objekt innerhalb des Factory-Musters.

Code kopieren Der Code lautet wie folgt:

Funktion Foo() {
var obj = {};
Obj.value = 'blub';

var private = 2;
Obj.someMethod = function(value) {
This.value = value;
}

obj.getPrivate = function() {
         Rückgabe privat;
}
Rückgabe obj;
}

Obwohl der obige Code weniger fehleranfällig ist als die Verwendung von new und bei der Verwendung privater Variablen praktischer ist, weist er auch einige Nachteile auf:

Da Prototypobjekte nicht gemeinsam genutzt werden können, ist mehr Speicher erforderlich.
Um die Vererbung zu implementieren, muss das Fabrikmuster alle Methoden eines anderen Objekts kopieren oder es als Prototyp eines neuen Objekts verwenden.
Das Aufgeben der Prototypenkette, nur um die Verwendung neuer zu vermeiden, scheint dem Geist der Javascript-Sprache zu widersprechen.

Zusammenfassung

Obwohl die Verwendung von new möglicherweise fehleranfälliger ist, ist dies kein Grund, auf die Verwendung der Prototypenkette zu verzichten. Der endgültige Ansatz hängt von den Anforderungen der Anwendung ab. Der beste Weg ist, einen Stil auszuwählen und dabei zu bleiben.

Einfach ausgedrückt initialisiert der Konstruktor ein Instanzobjekt und das Prototypattribut des Objekts erbt ein Instanzobjekt.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage