3

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

$(function() {
    var hash = window.location.hash.substring(1);
    window[hash]();
});

这很好用。

但是,我在命名空间中的 Javascript 如下所示:

    var help = {
            faq: function () {
                //do stuff
            },

            newFeatures: function () {
                //do stuff
            }
    }

我在顶部列出的函数不适用于命名空间的 javascript。我尝试手动将命名空间添加到前面(so var hash = "help." + window.location.hash.substring(1);),但这没有用。

如何在不从命名空间中删除我的 Javascript 的情况下解决此问题?

4

3 回答 3

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]();
});
于 2013-02-28T22:19:17.017 回答
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]];
}

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

于 2013-02-28T23:06:35.780 回答
-2

我不是真正的粉丝,但 'eval' 可能会起作用:

eval(hash + "()");

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

于 2013-02-28T22:25:30.633 回答