Modifier: Je dois m'excuser, le problème que j'ai posté n'existe pas réellement dans le code que j'ai posté, parce que je l'ai trop simplifié. Je vais essayer de poster quelque chose plus tard.Comment l'opérateur Javascript "this" gère-t-il les étendues?
La suppression serait également acceptable, mais il y a trop de réponses pour le moment, donc je ne peux pas le faire moi-même.
Edit2: Ok, va ici:
Soit,
function F() {
this.field = "value" ;
var init = function(value) {
this.field = value ;
} ;
this.method = function() {
return this.field ;
} ;
init(arguments[0]) ;
}
Maintenant, instanciation de type F
,
var f = new F("newValue") ;
règlera la valeur à l'objet Window
comme this
pointe vers lui lorsqu'il est appelé depuis la fermeture.
Reliure this
au Function
,
function F() {
var self = this ;
this.field = "value" ;
var init = function(value) {
self.field = value ;
} ;
this.method = function() {
return this.field ;
} ;
init(arguments[0]) ;
}
va résoudre le problème.
Pourtant, quelle est la raison de ce comportement - imho - impair?
Je suis un peu surpris que cela fonctionne du tout. Vos fonctions sont assignées aux variables "var", qui devraient disparaître dès le retour de la fonction. Ils ne sont jamais attachés à l'objet lui-même, donc 'f.method' n'aurait aucune valeur (donc par définition, il ne serait pas appelable). – cHao
Cela pourrait aider à l'expliquer: http://jibbering.com/faq/notes/closures/ –
@Brian: Qui était-ce? Cela pourrait aider à répondre à la question, mais n'expliquerait pas pourquoi 'f.method()' n'échoue pas avec des erreurs sur les valeurs non définies. – cHao