JQuery each() close - как получить доступ к внешней переменной
Какой лучший способ получить доступ к моей переменной this.rules из $.each()? Любое объяснение того, почему и как было бы полезно!
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)
}
Ответы
Ответ 1
Сохраните ссылку на this
- назовите ее self
, например, - перед вызовом .each()
, а затем войдите в rules
с помощью 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)
}
Ответ 2
Ответ выше João Silva не является хорошим решением, так как он создает глобальную переменную. Вы фактически не передаете переменную "self" каждой функции по ссылке, а ссылаетесь на глобальный объект "self".
В приведенном выше примере "this" находится объект окна, и установка "var self = this" на самом деле ничего не делает.
Объект Window имеет два самореферентных свойства, окно и self. Вы можете использовать глобальную переменную для прямого обращения к объекту Window.
Короче говоря, оба окна и self являются ссылками на объект Window, который является глобальным объектом клиентского javascript.
Создание функции закрытия - лучшее решение.
Скриншот, показывающий окно и само сравнение