forma primitiva de fábrica de JavaScript
Debido a que las propiedades de un objeto se pueden definir dinámicamente después de crearlo, se escribió un código similar al siguiente cuando se introdujo JavaScript por primera vez.
Copie el código de código de la siguiente manera:
var oCar = nuevo Objeto;
oCar.color = "azul";
oCoche.puertas = 4;
oCar.mpg = 25;
oCar.showColor = función() {
alerta(este.color);
};
En el código anterior, se crea el objeto car. Luego, dale algunos atributos: es azul, tiene cuatro puertas y rinde 25 millas por galón. El último atributo es en realidad un puntero a una función, lo que significa que el atributo es un método. Después de ejecutar este código, se puede utilizar el objeto car. Pero aquí hay un problema, es decir, es posible que deba crear varias instancias de automóvil, lo que obviamente no es una buena manera.
Solución: métodos de fábrica
Para resolver este problema, los desarrolladores crearon funciones de fábrica que crean y devuelven objetos de un tipo específico. Por ejemplo, la función createCar() se puede utilizar para encapsular las operaciones enumeradas anteriormente para crear un objeto de automóvil:
Copie el código de código de la siguiente manera:
función crearCoche(sColor,iDoors,iMpg) {
var oTempCar = nuevo objeto;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = función() {
alerta(este.color);
};
devolver oTempCar;
}
var oCar1 = createCar("rojo",4,23);
var oCar2 = createCar("azul",3,25);
oCar1.showColor(); //Salida "rojo"
oCar2.showColor(); //Salida "azul"
Llamar a esta función de fábrica creará un nuevo objeto y le dará todos los atributos necesarios. Agregue parámetros a la función createCar() para asignar valores a los atributos de color, puertas y mpg del objeto de automóvil que se creará. Esto hace que dos objetos tengan las mismas propiedades, pero valores de propiedad diferentes. Lo malo de este método es que cada vez que se crea un objeto de automóvil (es decir, la función createCar se llama una vez), el método showColor se crea repetidamente para cada objeto. De hecho, cada objeto comparte el mismo. función. . Entonces intentamos declarar los atributos de su método fuera de la función.
Definir métodos de objetos fuera de las funciones de fábrica.
Algunos desarrolladores evitan este problema definiendo el método del objeto fuera de la función de fábrica y luego señalando el método a través de una propiedad:
Copie el código de código de la siguiente manera:
función mostrarColor() {
alerta(este.color);
}
función crearCoche(sColor,iDoors,iMpg) {
var oTempCar = nuevo objeto;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = mostrarColor;
devolver oTempCar;
}
var oCar1 = createCar("rojo",4,23);
var oCar2 = createCar("azul",3,25);
oCar1.showColor(); //Salida "rojo"
oCar2.showColor(); //Salida "azul"
En el código reescrito anteriormente, la función showColor() se define antes de la función createCar(). Dentro de createCar(), el objeto recibe un puntero a la función showColor() existente. Funcionalmente, esto resuelve el problema de crear objetos de función repetidamente, pero semánticamente, la función no parece un método del objeto;