JQuery each() close - как получить доступ к внешней переменной - программирование

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)
}
4b9b3361

Ответ 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.

Создание функции закрытия - лучшее решение.

Скриншот, показывающий окно и само сравнение