Вызов функции Javascript из хеш-значения с пространствами имен
В настоящее время у меня есть этот код для вызова функции из хеш-значения при загрузке страницы:
$(function() {
var hash = window.location.hash.substring(1);
window[hash]();
});
Это прекрасно работает.
Тем не менее, мой Javascript в пространстве имен выглядит так:
var help = {
faq: function () {
//do stuff
},
newFeatures: function () {
//do stuff
}
}
Моя функция, которую я перечислил вверху, не работает для javascript с пространством имен. Я попытался вручную добавить пространство имен на передний план (так var hash = "help." + window.location.hash.substring(1);
) но это не сработало.
Как я могу обойти эту проблему, не удаляя мой Javascript из пространства имен?
3 ответа
Это должно работать:
$(function() {
var hash = window.location.hash.substring(1);
window.help[hash]();
});
В JavaScript точечные обозначения и квадратные скобки являются взаимозаменяемыми, если ключ является допустимым идентификатором JavaScript. (В противном случае вы должны использовать квадратные скобки.)
Так что вы также можете сделать это (хотя точечная запись более читабельна):
$(function() {
var hash = window.location.hash.substring(1);
window["help"][hash]();
});
Я использую аналогичный метод, где я храню значения объекта в хэш.
Моя техника:
- используйте точку в хэше, чтобы показать иерархию - в вашем случае: #help.faq
- запустить скрипт для преобразования точечной нотации и получения фактического значения
Демонстрация в реальном времени: http://jsfiddle.net/Kn4w2/1/
Пример кода:
var hashArray=hash.split("."),
myMethod=window;
for (var i=0;i<hashArray.length;i++){
myMethod=myMethod[hashArray[i]];
}
Единственным ограничением является то, что, конечно, имена ваших методов не должны содержать точку.