js: вернуть как первоклассный объект, так и строку из переменной

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

В плагине есть функция для вызова этих модулей. Ранее я назвал их так:

processInstance($(doc).find('[data-bcp-crumbs]'), crumbs);
processInstance($(doc).find('[data-bcp-copyright]'), copyright);
processInstance($(doc).find('[data-bcp-activenav]'), activeNav);

Последняя часть каждой строки - это имя функции, которая будет вызываться в скрипте processInstance. Итак, у меня есть имя функции в виде строки и первоклассного объекта в каждой строке. Я хотел бы упростить это до чего-то вроде этого:

for (var i=0; i>module.length;i++) {
    processInstance($(doc).find('[data-bcp-'+module[i].toLowerCase()+']'), window[module[i]]);
}

Массив модулей добавляется после каждого экземпляра фактического кода модуля. Я делаю это так:

module.push('crumbs');

Это не работает, потому что window[module[i]] возвращает undefined.

Как мой код нужно изменить, чтобы это работало?

Вот пример jsfiddle всего плагина со вставленным простым модулем: http://jsfiddle.net/michaeljimmy/U8anp/1/

1 ответ

Решение

Мой коллега помог мне найти ответ на этот вопрос. Сначала я заметил ошибку в цикле for. Я имел> вместо <. Это не помогло.:)

Концепция с кодом была правильной. Проблема была в объеме. Если вы посмотрите на jsfiddle, вы увидите, что все это находится в корпусе, включая функции, которые я пытался вызвать. Таким образом, у окна не было доступа к функциям. В итоге мы сделали пару простых изменений.

Во-первых, наряду с module.push('crumbs') или любым другим именем функции, мы добавили:

functions.crumbs = crumbs;

Затем вместо окна [module[i]] мы использовали

functions[module[i]]

Без корпуса окно [module[i]] работало бы просто отлично.

Другие вопросы по тегам