Considere esto:
function f2(x) {
return x+1;
};
X = function(){
this.f1=function (x) {
return 2*f2(x);
}
return this;
};
Entonces x = new X(); x.f1(1)
funciona bien.
Pero cuando quiero hacer esto:
X = function(){
this.f2 = function(x) {
return x+1;
};
this.f1=function (x) {
return 2*f2(x);
}
return this;
};
La misma declaración se quejará de que no puede encontrar f2. En, por ejemplo, c #, puede decir
class X {
int f2(int x){return x+1;}
int f1(int x){return 2*f2(x);}
}
Y esto funcionará
X x=new X();
x.f1(1)
¿por qué?
5 respuestas
Para hacer referencia a f2
en su segundo bloque de código, deberá usar this.f2
. this
hace referencia al contexto en el que se ejecuta la función. Como llamas a f1
de la siguiente manera:
x.f1();
... context
se establece en la instancia, x
.
JavaScript no hace que las variables de instancia estén disponibles para el alcance de la misma manera que las variables de alcance, es decir, aquellas directamente disponibles:
X = function(){
var f2 = 123;
this.f2 = function(x) {
return x+1;
};
this.f1=function (x) {
console.log(f2); // => 123
console.log(this.f2); // => function(){}
return 2 * this.f2(x);
};
return this;
};
X = function(){
this.f2 = function(x) {
return x+1;
};
this.f1=function (x) {
return 2*this.f2(x); // <-- Need this here since it is not implicit
}
return this;
};
Porque olvidaste esto .f2. Javascript no ve las variables de clase sin esto
Debe hacer referencia a f2 con la palabra clave this explícitamente.
X = function(){
this.f2 = function(x) {
return x+1;
};
this.f1=function (x) {
return 2*this.f2(x);
}
return this;
};
Javascript no tiene el this
implícito que obtienes en C #. Necesita agregar esto en:
X = function(){
this.f2 = function(x) {
return x+1;
};
this.f1=function (x) {
return 2*this.f2(x);
};
return this;
};
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.