如何在JavaScript中将String转换为函数?

时间:2012-07-02 12:07:48

标签: javascript jquery jquery-plugins

我有以下代码用于制作一个简单的模板引擎.html页面如下: -

<ns tmp="red"></ns>
<ns tmp="blue"></ns>

另一方面,我有一个JQuery插件中的JavaScript,它读取标签,然后获取tmp的属性 现在我想接收字符串的值,然后将其转换为函数,以便调用对象内部的预定义值,但字符串转换为函数不起作用。我在Stack溢出中提到了一些问题但没有用。然后是我在下面提到的JQuery代码。

(function($){

    /*Collection of the template data*/
    var k=template();
    /*This retrieves all the custom tags and gets the template
    property to point to.*/
    var templateArray=$('ns');
    templateArray.each(function(){
    var template=$(this).attr('tmp');
    var funcName=window[template]();//This does not work
    alert(l());
    });
})(jQuery);

    function template(){
        var t={
            blue:function(){
            return "Hello";
            },
             red:function(){
            return "ff";
            }
        };
        return t;
    }

请建议如何相处。我也有这个小提琴。随意编辑,以便我能够以某种方式调用对象内部的函数。谢谢 小提琴链接FIDDLE LINK

2 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,您要执行的函数不是window对象的一部分,而是template对象的一部分,因此您需要从适当的位置获取它们

此外,对局部变量使用现有函数的相同名称可能有效,但根本不是一个好主意,最好使用正确的名称。

工作代码:

templateArray.each(function(){
    var tmp = $(this).attr('tmp');
    var funcName=k[tmp];
    var result = funcName();
    alert(result);
});

Updated fiddle

答案 1 :(得分:1)

在javascript对象和数组中是一回事。因此template.redtemplate['red']是相同的。

我建议将函数放入数组中。这样你甚至可以在运行时扩展它。

http://jsfiddle.net/tricki/YS9Gs/10/