Heim > Artikel > Web-Frontend > Ausführliche Erläuterung des Konstruktormusters in JavaScript_Javascript-Kenntnissen
Eine kurze Beschreibung des Konstruktormusters (siehe Bild):
Der Konstruktor kann nicht vererbt werden, daher kann das Überschreiben nicht überschrieben werden, aber das Überladen kann überschrieben werden. Konstruktoren werden zum Erstellen von Objekten eines bestimmten Typs verwendet. Sie bereiten das Objekt für die Verwendung vor und empfangen Parameter, mit denen der Konstruktor die Werte von Mitgliedseigenschaften und -methoden festlegen kann, wenn das Objekt zum ersten Mal erstellt wird
1. Objekt erstellen
Zwei Möglichkeiten, neue Objekte zu erstellen
var newObject={}; var newObject=new object();//object 构造器的简洁记法
2. Basiskonstruktor
Wenn Javascript keine Klassen unterstützt, können Objekte und Konstruktoren verwendet werden, um ein Objekt über das neue Schlüsselwort zu instanziieren. Der Code sieht wahrscheinlich so aus
function Car(model,year,miles){ this.model=model; this.year=year; this.miles=miles; this.toString=function() { return this.model+"has done"+this.miles+"miles"; }; }; //用法 //可以创建car新实例 var civic=new Car("Hona Civic",2009,2000); var mondeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
3. Konstrukteur mit Prototyp
JavaScript hat das Prototyp-Attribut. Nach dem Aufruf des JavaScript-Konstruktors zum Erstellen eines Objekts verfügt das neue Objekt über alle Eigenschaften des Konstruktorprototyps. Auf diese Weise können mehrere Car-Objekte erstellt werden (die auf denselben Prototyp zugreifen)
funcion() Ca(model,year,miles){ this.model=model; this.year=year; this.miles=miles; //注意使用Object.prototype.newMethod 而不是Object.prototype是为了重新定义prototype对象 Car.prototype.toString=function(){ return this.model+"Has done" +this.miles+"miles"; }; }; //用法 var civic=new Car("Honda Civic",2009,20000); var momdeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
Jetzt kann eine einzelne Instanz von toString() von allen Car-Objekten gemeinsam genutzt werden
Lassen Sie mich die häufigsten Fehler von Konstrukteuren in tatsächlichen Projekten mit Ihnen teilen
class A { public int Avar; public A() { System.out.println("AAA"); doSomething(); } public void doSomething() { Avar = 1111; System.out.println("A.doSomething()"); } } public class B extends A { public int Bvar = 2222; public B() { System.out.println("BBB"); doSomething(); System.out.println("Avar=" + Avar); } public void doSomething() { System.out.println("Bvar=" + Bvar); } public static void main(String[] args) { new B(); } }
Die Reihenfolge ist wie folgt: Um B zu generieren, müssen Sie zuerst A generieren. Rufen Sie also den Konstruktor von A auf, geben Sie AAA aus und rufen Sie dann die Methode dosomething auf. Hinweis: Diese Methode von A wird von B überschrieben Was Sie generieren, ist das Objekt von B. Daher wird die Methode von B aufgerufen. Da BVAR derzeit keinen bestimmten Wert hat, wird es automatisch auf 0 initialisiert
Generieren Sie dann das B-Objekt, initialisieren Sie zuerst die Variable BVAR, rufen Sie dann den Konstruktor auf, um BBB auszugeben, und rufen Sie dann die Methode auf. Zu diesem Zeitpunkt wurde BVAR initialisiert, sodass der Ausgang BVAR = 2222 und die Variable AVAR in ist Objekt A ruft die Methode dosomething von Objekt A nicht auf, daher ist ihr Wert 0 und gibt dann 0 ausDie gesamte Ausgabe lautet wie folgt:
AAA
Bvar=0
BBB
Bvar=2222
Avar=0