Как может я переменные доступа за пределами текущей области в JavaScript?

Я пишу приложение в JavaScript и не могу понять это, как получить доступ к переменным, объявил в моей функции, в этом синтаксическом анализе jQuery. Внутри я могу получить доступ к глобальным переменным, но я действительно не хочу создавать глобальный Вар для этих значений.

В основном я хочу извлечь имена файлов из xml документа в simulationFiles переменная. Я проверяю, равен ли атрибут узла с simName и извлеките две строки в xml элементах, та первая часть думают, что она работает.

Как я могу извлечь те xml элементы и добавить их к локальным переменным?

function CsvReader(simName) {
    this.initFileName = "somepath";
    this.eventsFileName = "somepath";
    $(simulationFiles).find('simulation').each(function() {
       if ($(this).attr("name") == simName) {
           initFileName += $(this).find("init").text();
           eventsFileName += $(this).find("events").text();
       }
    });
}   
6
задан sekmet64 2 May 2010 в 21:29
поделиться

2 ответа

this в CsvReader функция не то же самое this в each () обратный вызов (где вместо этого это текущий элемент в итерации). Чтобы получить доступ к области внешней функции в обратном вызове, нам нужно иметь возможность ссылаться на нее по другому имени, которое вы можете определить во внешней области:

function CsvReader(simName) {
    this.initFileName = "somepath";
    this.eventsFileName = "somepath";
    var self = this; // reference to this in current scope
    $(simulationFiles).find('simulation').each(function() {
       if ($(this).attr("name") == simName) {
           // access the variables using self instead of this
           self.initFileName += $(this).find("init").text();
           self.eventsFileName += $(this).find("events").text();
       }
    });
}
14
ответ дан 8 December 2019 в 12:18
поделиться

Я сделал рабочую демонстрацию (я изменил ее для использования классов, чтобы она работала с HTML).

function CsvReader(simName) {
    this.initFileName = "somepath";
    this.eventsFileName = "somepath";
    var context = this;
    $(simulationFiles).find('simulation').each(function() {
       if ($(this).attr("name") == simName) {
           context.initFileName += $(this).find("init").text();
           context.eventsFileName += $(this).find("events").text();
       }
    });
}   
4
ответ дан 8 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: