从具有名称空间的哈希值调用Javascript函数

时间:2013-02-28 22:17:16

标签: javascript javascript-namespaces

我目前有这段代码从页面加载的哈希值调用函数:

$(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 个答案:

答案 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)

我使用的方法类似于将对象值存储在哈希值中。

我的技术:

  • 在哈希中使用一个点来显示层次结构 - 在您的情况下:#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]];
}

唯一的限制是你的方法名称当然不应该包含一个点。

答案 2 :(得分:-2)

我不是真正的粉丝,但'eval'可能有效:

eval(hash + "()");

示例:http://jsfiddle.net/pGktd/