maneira de fábrica javaScript maneira primitiva
Como as propriedades de um objeto podem ser definidas dinamicamente após a criação do objeto, um código semelhante ao seguinte foi escrito quando o JavaScript foi introduzido pela primeira vez.
Copie o código do código da seguinte forma:
var oCar = novo Objeto;
oCar.color = "azul";
oCarro.portas = 4;
oCarro.mpg = 25;
oCar.showColor = function() {
alerta(esta.cor);
};
No código acima, o objeto carro é criado. Em seguida, atribua alguns atributos: é azul, tem quatro portas e percorre 40 quilômetros por galão. O último atributo é na verdade um ponteiro para uma função, o que significa que o atributo é um método. Após executar este código, o objeto car pode ser utilizado. Mas há um problema aqui, ou seja, pode ser necessário criar várias instâncias de car, o que obviamente não é uma boa maneira.
Solução: métodos de fábrica
Para resolver esse problema, os desenvolvedores criaram funções de fábrica que criam e retornam objetos de um tipo específico. Por exemplo, a função createCar() pode ser usada para encapsular as operações listadas anteriormente de criação de um objeto carro:
Copie o código do código da seguinte forma:
function createCar(sColor,iDoors,iMpg) {
var oTempCar = novo objeto;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function() {
alerta(esta.cor);
};
retornar oTempCar;
}
var oCar1 = createCar("vermelho",4,23);
var oCar2 = createCar("azul",3,25);
oCar1.showColor(); //Saída "vermelho"
oCar2.showColor(); //Saída "azul"
Chamar esta função de fábrica criará um novo objeto e fornecerá todos os atributos necessários à função createCar() para atribuir valores aos atributos de cor, portas e mpg do objeto carro a ser criado. Isso faz com que dois objetos tenham as mesmas propriedades, mas valores de propriedade diferentes. A desvantagem desse método é que toda vez que um objeto carro é criado (ou seja, a função createCar é chamada uma vez), o método showColor é criado repetidamente para cada objeto. Na verdade, cada objeto compartilha o mesmo. função. Então tentamos declarar seus atributos de método fora da função.
Definir métodos de objeto fora das funções de fábrica
Alguns desenvolvedores evitam esse problema definindo o método do objeto fora da função de fábrica e apontando para o método através de uma propriedade:
Copie o código do código da seguinte forma:
function showColor() {
alerta(esta.cor);
}
function createCar(sColor,iDoors,iMpg) {
var oTempCar = novo objeto;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
retornar oTempCar;
}
var oCar1 = createCar("vermelho",4,23);
var oCar2 = createCar("azul",3,25);
oCar1.showColor(); //Saída "vermelho"
oCar2.showColor(); //Saída "azul"
No código reescrito acima, a função showColor() é definida antes da função createCar(). Dentro de createCar(), o objeto recebe um ponteiro para a função showColor() existente. Funcionalmente, isso resolve o problema de criar repetidamente objetos de função, mas semanticamente, a função não se parece com um método do objeto;