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]] работало бы просто отлично.