Quel est le meilleur moyen d'accéder à ma variable this.rules à partir de $ .each ()? Toute explication de pourquoi/comment serait également utile!
app.Style = function(node) {
this.style = node;
this.rules = [];
var ruleHolder = node.find('Rule');
$.each(ruleHolder, function(index, value) {
var myRule = new app.Rule($(ruleHolder[index]));
this.rules.Push(myRule);
});
console.log(this.rules)
}
Stockez une référence à this
- nommez-la self
, par exemple -, avant d'appeler .each()
, puis accédez à rules
à l'aide de self.rules
:
app.Style = function(node) {
this.style = node;
this.rules = [];
var ruleHolder = node.find('Rule');
var self = this;
$.each(ruleHolder, function(index, value) {
var myRule = new app.Rule($(ruleHolder[index]));
self.rules.Push(myRule);
});
console.log(this.rules)
}
La réponse ci-dessus de João Silva n’est pas une bonne solution car elle crée une variable globale. En réalité, vous ne transmettez pas une variable "self" à chaque fonction par référence, mais vous vous référez à l'objet global "self".
Dans l'exemple ci-dessus, "this" est l'objet window et la définition de "var self = this" ne fait rien.
L'objet Window a deux propriétés auto-référentielles, window et self. Vous pouvez utiliser l'une ou l'autre variable globale pour faire directement référence à l'objet Window.
En bref, window et self sont des références à l'objet Window, qui est l'objet global de javascript côté client.
Créer une fonction de fermeture est une meilleure solution .
c'est plus élégant sans var self = this;
app.Style = function(node) {
this.style = node;
this.rules = [];
var ruleHolder = node.find('Rule');
$.each(ruleHolder, function(index, value) {
var myRule = new app.Rule($(ruleHolder[index]));
this.rules.Push(myRule);
}.bind(this));
console.log(this.rules)
}