yo soy un principiante en JS, y estoy sorprendido por el siguiente código:Javascript prototipo y "este" acceso en el cierre
Foo = function(arg) {
this.arg = arg;
};
Foo.prototype = {
init: function() {
var f = function() {
alert("current arg: " + this.arg); // am expecting "bar", got undefined
}
f();
}
};
var yo = Foo("bar");
yo.init();
que se esperaba conseguir "arg actual: bar", pero tengo "actual arg: indefinido ". Noté que copiando this.arg en una variable "normal" en primer lugar, y refiriéndose esta variable en el cierre funciona:
Foo.prototype = {
init: function() {
var yo = this.arg;
var f = function() {
alert("current arg: " + yo); }
f();
}
};
estoy haciendo algo mal, tengo expectativas equivocadas, o lo hace caer en una de las js WTF?
Copiar 'this.arg' en una variable" normal "primero no hará nada diferente de lo que' this' significa para su función. – bobobobo
@bobobobo Técnicamente cierto, pero ¿cuándo alguien insinuó que eso pasaría? La forma en que redactó eso podría ser engañosa. De hecho, no usó 'this' en el segundo ejemplo; el uso de la variable local "yo" crea un cierre que mantiene la referencia al objeto deseado incluso dentro de la función 'f'. – theazureshadow