首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从具有名称空间的哈希值调用Javascript函数

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

Stack Overflow用户
提问于 2013-03-01 06:17:16
回答 3查看 1.3K关注 0票数 3

我目前有这段代码,在页面加载时调用散列值中的函数:

代码语言:javascript
复制
$(function() {
    var hash = window.location.hash.substring(1);
    window[hash]();
});

这很好用。

然而,我在命名空间中的Javascript是这样的:

代码语言:javascript
复制
    var help = {
            faq: function () {
                //do stuff
            },

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

我上面列出的函数对命名空间的javascript不起作用。我曾尝试手动将名称空间添加到前端(所以是var hash = "help." + window.location.hash.substring(1);),但不起作用。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-01 06:19:17

这应该是可行的:

代码语言:javascript
复制
$(function() {
    var hash = window.location.hash.substring(1);
    window.help[hash]();
});

在JavaScript中,只要键是有效的JavaScript标识符,点符号和方括号就可以互换。(否则,您必须使用方括号。)

所以你也可以这样做(尽管点符号更具可读性):

代码语言:javascript
复制
$(function() {
    var hash = window.location.hash.substring(1);
    window["help"][hash]();
});
票数 4
EN

Stack Overflow用户

发布于 2013-03-01 07:06:36

我正在使用一种类似的方法,将对象值存储在散列中。

我的技巧是:

  • 在散列中使用一个点来显示层次结构-在您的示例中:#help.faq
  • 运行脚本来转换点表示法并检索实际值

现场演示:http://jsfiddle.net/Kn4w2/1/

代码示例:

代码语言:javascript
复制
var hashArray=hash.split("."),
    myMethod=window;
for (var i=0;i<hashArray.length;i++){
        myMethod=myMethod[hashArray[i]];
}

唯一的限制当然是你的方法名不能包含点。

票数 1
EN

Stack Overflow用户

发布于 2013-03-01 06:25:31

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

代码语言:javascript
复制
eval(hash + "()");

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15146765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档