我目前有这段代码从页面加载的哈希值调用函数:
$(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的情况下解决此问题?
答案 0 :(得分:4)
这应该有效:
$(function() {
var hash = window.location.hash.substring(1);
window.help[hash]();
});
在JavaScript中,点符号和方括号是可互换的,只要键是有效的JavaScript标识符即可。 (否则,你必须使用方括号。)
所以你也可以这样做(尽管点符号更具可读性):
$(function() {
var hash = window.location.hash.substring(1);
window["help"][hash]();
});
答案 1 :(得分:1)
我使用的方法类似于将对象值存储在哈希值中。
我的技术:
现场演示:http://jsfiddle.net/Kn4w2/1/
代码示例:
var hashArray=hash.split("."),
myMethod=window;
for (var i=0;i<hashArray.length;i++){
myMethod=myMethod[hashArray[i]];
}
唯一的限制是你的方法名称当然不应该包含一个点。
答案 2 :(得分:-2)