Passando parâmetros para uma função protótipo em javascript
-
06-07-2019 - |
Pergunta
Eu estive recentemente experimentando com protótipos em javascript e eu não consigo descobrir por que o seguinte código não funciona. O que eu gostaria de fazer é criar uma nova instância de queijo com parâmetro n.
function food(n) {
this.n=n;
}
function cheese(n) {
alert(this.n);
}
cheese.prototype=new food;
new cheese('paramesian');
Solução
Você está criando uma nova instância Cheese
, eo n
argumento nunca é usado ou atribuído à variável Cheese
exemplo this.n
, porque essa lógica é usada apenas no construtor Food
.
Você pode fazer um par de coisas:
1. Aplicar o construtor Food
dentro da função Cheese
, utilizando o arguments
objeto eo contexto recém-criado (this
).
function Food(n) {
this.n=n;
}
function Cheese(n) {
Food.apply (this, arguments);
alert(this.n);
}
new Cheese('paramesian');
2. Repita a lógica construtor Food
(this.n = n
) na função de construtor Cheese
:
function Food(n) {
this.n=n;
}
function Cheese(n) {
this.n = n;
alert(this.n);
}
Cheese.prototype = new Food();
new Cheese('paramesian');
3. Usar outra técnica, como poder construtores :
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. Outra opção, prototypal herança :
// 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'
Outras dicas
Parece que você só quer entender como protótipo encadeamento obras em JavaScript. O seguinte é um excelente, simples e bem explicado tutorial http://www.herongyang.com/JavaScript/Inheritance- de-Construtor-Prototype-Object.html
Editar , esta é, aparentemente, não herança prototípica (ver comentários), mas parece trabalho para este fim específico.
function food(n) {
this.n=n;
}
function cheese(n) {
this.prototype = food;
this.prototype(n);
alert(this.n);
}
new cheese('paramesian');