Usted está creando un nuevo Cheese
ejemplo, y el argumento n
no se utiliza nunca o asignado a la variable de instancia Cheese
this.n
, debido a que la lógica sólo se utiliza en el Food
constructor.
Puede hacer un par de cosas:
1. Apply la Food
constructor dentro de la función Cheese
, utilizando el objeto arguments
y el contexto recién creado (this
).
function Food(n) {
this.n=n;
}
function Cheese(n) {
Food.apply (this, arguments);
alert(this.n);
}
new Cheese('paramesian');
2. Repita la lógica Food
constructor (this.n = n
) en la función Cheese
constructor:
function Food(n) {
this.n=n;
}
function Cheese(n) {
this.n = n;
alert(this.n);
}
Cheese.prototype = new Food();
new Cheese('paramesian');
3. Use otra técnica, como 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. Sin embargo, otra opción, 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'
Me gusta el n. ° 3, pero debe quitar el 'nuevo' delante de 'food (n)'. – Magnar
@Magnar, sí era un error tipográfico, fijo, no hay '' this' o utilizados new' ... – CMS
Gracias por la respuesta informativa. La opción número 1 parece ser la mejor opción por ahora, al menos hasta que comprenda por completo el n. ° 3. – Kenneth