Si sta creando una nuova Cheese
esempio, e l'argomento n
non viene mai usata o assegnato alla variabile Cheese
esempio this.n
, perché la logica che viene utilizzato solo sul costruttore Food
.
Si può fare un paio di cose:
1. Apply il costruttore Food
all'interno della funzione Cheese
, utilizzando l'oggetto arguments
e il contesto appena creato (this
).
function Food(n) {
this.n=n;
}
function Cheese(n) {
Food.apply (this, arguments);
alert(this.n);
}
new Cheese('paramesian');
2. Ripetere la logica Food
costruttore (this.n = n
) sulla funzione Cheese
costruzione:
function Food(n) {
this.n=n;
}
function Cheese(n) {
this.n = n;
alert(this.n);
}
Cheese.prototype = new Food();
new Cheese('paramesian');
3. Utilizzare un'altra tecnica, come power constructors:
function food (n) {
var instance = {};
instance.n = n;
return instance;
}
function cheese (n) {
var instance = food(n);
alert(instance.n);
return instance;
}
cheese('parmesian');
cheese('gouda');
4. Ancora un'altra opzione, prototypal inheritance:
// helper function
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
var food = {
n: "base food",
showName : function() { alert(this.n); }
};
var cheese1 = Object.create(food);
cheese1.n = 'parmesian';
cheese1.showName(); // method exists only in 'food'
Mi piace # 3, ma devi rimuovere il 'nuovo' davanti a 'cibo (n)'. – Magnar
@Magnar, sì era un errore di battitura, fisso, non 'questo' o' nuovo' usato ... – CMS
Grazie per la risposta informativa. L'opzione numero 1 sembra essere la scelta migliore per ora, almeno fino a quando non si comprenderà pienamente il punto # 3. – Kenneth