méthode d'usine javaScript de manière primitive
Étant donné que les propriétés d'un objet peuvent être définies dynamiquement après la création de l'objet, un code similaire au suivant a été écrit lors de l'introduction de JavaScript.
Copiez le code comme suit :
var oCar = nouvel objet ;
oCar.color = "bleu" ;
oCar.doors = 4 ;
oCar.mpg = 25 ;
oCar.showColor = fonction() {
alerte(this.color);
} ;
Dans le code ci-dessus, l'objet car est créé. 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éthodes d'usine
Pour résoudre ce problème, les développeurs ont créé des fonctions d'usine qui créent et renvoient des objets d'un type spécifique. 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 :
Copiez le code comme suit :
fonction createCar(sColor,iDoors,iMpg) {
var oTempCar = nouvel objet ;
oTempCar.color = sColor;
oTempCar.doors = iDoors ;
oTempCar.mpg = iMpg;
oTempCar.showColor = fonction() {
alerte(this.color);
} ;
retourner oTempCar ;
}
var oCar1 = createCar("rouge",4,23);
var oCar2 = createCar("bleu",3,25);
oCar1.showColor(); //Sortie "rouge"
oCar2.showColor(); //Sortie "bleu"
L'appel de cette fonction d'usine créera un nouvel objet et lui donnera tous les attributs nécessaires. Ajoutez des paramètres à la fonction createCar() pour attribuer des valeurs aux attributs couleur, portes et 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 d'objet en dehors des fonctions d'usine
Certains développeurs évitent ce problème en définissant la méthode de l'objet en dehors de la fonction d'usine, puis en pointant vers la méthode via une propriété :
Copiez le code comme suit :
fonction showColor() {
alerte(this.color);
}
fonction createCar(sColor,iDoors,iMpg) {
var oTempCar = nouvel objet ;
oTempCar.color = sColor;
oTempCar.doors = iDoors ;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
retourner oTempCar ;
}
var oCar1 = createCar("rouge",4,23);
var oCar2 = createCar("bleu",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.