La méthode d'usine JavaScript est la méthode d'origine
Étant donné que les propriétés d'un objet peuvent être définies dynamiquement après la création de l'objet, lorsque JavaScript a été introduit pour la première fois, un code similaire au suivant serait être écrit
Dans le code ci-dessus, créez l'objet car. Donnez-lui ensuite quelques attributs : il est bleu, a quatre portes et obtient 25 miles par gallon. Le dernier attribut est en fait un pointeur vers une fonction, ce qui signifie que l'attribut est une méthode. Après avoir exécuté ce code, l'objet car peut être utilisé. Mais il y a un problème ici, c'est que vous devrez peut-être créer plusieurs instances de car, ce qui n'est évidemment pas une bonne méthode.
Solution : méthode Factory
Pour résoudre ce problème, les développeurs ont créé des fonctions d'usine qui créent et renvoient des objets de types spécifiques. Par exemple, la fonction createCar() peut être utilisée pour encapsuler les opérations de création d'un objet voiture précédemment répertoriées :
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //Sortie "rouge"
oCar2.showColor(); //Sortie "bleu"
Appelez cette fonction d'usine pour créer un nouvel objet et donnez-lui tous les attributs nécessaires. Ajoutez des paramètres à la fonction createCar() pour attribuer des valeurs aux attributs de couleur, de portes et de mpg de l'objet voiture à créer. Cela fait que deux objets ont les mêmes propriétés, mais des valeurs de propriété différentes. Le mauvais côté de cette méthode est que chaque fois qu'un objet car est créé (c'est-à-dire que la fonction createCar est appelée une fois), la méthode showColor est créée à plusieurs reprises pour chaque objet. En fait, chaque objet partage la même chose. fonction. . Nous essayons donc de déclarer ses attributs de méthode en dehors de la fonction.
Définir des méthodes objet en dehors de la fonction usine
Certains développeurs définissent des méthodes objet en dehors de la fonction usine, puis pointent vers la méthode via des attributs pour éviter ce problème :
function createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
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(); //Sortie "rouge"
oCar2.showColor(); //Sortie "bleu"
Dans le code réécrit ci-dessus, la fonction showColor() est définie avant la fonction createCar(). Dans createCar(), l'objet reçoit un pointeur vers la fonction showColor() existante. Fonctionnellement, cela résout le problème de la création répétée d’objets fonction ; mais sémantiquement, la fonction ne ressemble pas à une méthode de l’objet.