JavaScript-Factory-Methode auf primitive Weise
Da die Eigenschaften eines Objekts dynamisch definiert werden können, nachdem das Objekt erstellt wurde, wurde bei der Einführung von JavaScript Code ähnlich dem folgenden geschrieben.
Kopieren Sie den Codecode wie folgt:
var oCar = neues Objekt;
oCar.color = "blau";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
alarm(this.color);
};
Im obigen Code wird das Objekt auto erstellt. Geben Sie ihm dann ein paar Attribute: Er ist blau, hat vier Türen und erreicht 25 Meilen pro Gallone. Das letzte Attribut ist eigentlich ein Zeiger auf eine Funktion, was bedeutet, dass das Attribut eine Methode ist. Nach der Ausführung dieses Codes kann das Objekt auto verwendet werden. Hier gibt es jedoch ein Problem: Möglicherweise müssen Sie mehrere Instanzen von car erstellen, was offensichtlich keine gute Methode ist.
Lösung: Fabrikmethoden
Um dieses Problem zu lösen, haben Entwickler Factory-Funktionen erstellt, die Objekte eines bestimmten Typs erstellen und zurückgeben. Beispielsweise kann die Funktion createCar() verwendet werden, um die zuvor aufgeführten Vorgänge zum Erstellen eines Autoobjekts zu kapseln:
Kopieren Sie den Codecode wie folgt:
Funktion createCar(sColor,iDoors,iMpg) {
var oTempCar = neues Objekt;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function() {
alarm(this.color);
};
return oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //Ausgabe „rot“
oCar2.showColor(); //Ausgabe „blau“
Durch Aufrufen dieser Factory-Funktion wird ein neues Objekt erstellt und ihm alle erforderlichen Attribute zugewiesen. Fügen Sie der Funktion „createCar()“ Parameter hinzu, um den Attributen „Farbe“, „Türen“ und „MPG“ des zu erstellenden Autoobjekts Werte zuzuweisen. Dadurch haben zwei Objekte die gleichen Eigenschaften, aber unterschiedliche Eigenschaftswerte. Das Schlimme an dieser Methode ist, dass jedes Mal, wenn ein Autoobjekt erstellt wird (dh die Funktion „createCar“ einmal aufgerufen wird), die Methode „showColor“ wiederholt für jedes Objekt erstellt wird. Dies ist tatsächlich nicht notwendig Funktion. Deshalb versuchen wir, seine Methodenattribute außerhalb der Funktion zu deklarieren.
Definieren Sie Objektmethoden außerhalb von Factory-Funktionen
Einige Entwickler vermeiden dieses Problem, indem sie die Methode des Objekts außerhalb der Factory-Funktion definieren und dann über eine Eigenschaft auf die Methode verweisen:
Kopieren Sie den Codecode wie folgt:
Funktion showColor() {
alarm(this.color);
}
Funktion createCar(sColor,iDoors,iMpg) {
var oTempCar = neues Objekt;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
return oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //Ausgabe „rot“
oCar2.showColor(); //Ausgabe „blau“
Im oben umgeschriebenen Code ist die Funktion showColor() vor der Funktion createCar() definiert. Innerhalb von createCar() erhält das Objekt einen Zeiger auf die vorhandene Funktion showColor(). Funktional löst dies das Problem der wiederholten Erstellung von Funktionsobjekten, aber semantisch sieht die Funktion nicht wie eine Methode des Objekts aus.