Je suis un débutant dans js, et je suis intrigué par le code suivant:javascript prototype et « ce » l'accès à la fermeture
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();
je devais obtenir « arg actuelle: bar », mais j'ai reçu « courant arg: indéfini ". J'ai remarqué que en copiant this.arg dans une « normale » première variable, et cette variable dans se référant à la fermeture fonctionne:
Foo.prototype = {
init: function() {
var yo = this.arg;
var f = function() {
alert("current arg: " + yo); }
f();
}
};
que je fais quelque chose de mal, a obtenu de mauvaises attentes, ou bien elle tombe dans l'une des js WTF?
Copier 'this.arg' dans une variable" normale "ne fera rien d'autre que ce que' this' signifie pour votre fonction. – bobobobo
@bobobobo Techniquement vrai, mais quand est-ce que quelqu'un a laissé entendre que cela arriverait? La façon dont vous avez formulé cela pourrait être trompeuse. Il n'utilisait en fait pas ceci dans le deuxième exemple; l'utilisation de la variable locale 'yo' crée une fermeture qui garde la référence à l'objet prévu même à l'intérieur de la fonction' f'. – theazureshadow