使用字符串变量访问JavaScript模块方法

使用字符串变量访问JavaScript模块方法,javascript,jquery,Javascript,Jquery,我用JavaScript创建了一个模块 var test = function () { var validate = function () { alert("fg"); }; return { validate: validate }; }(); 现在,我可以使用字符串访问上述模块吗?例如: $(function () { var s = "test"; s.validate(); // error

我用JavaScript创建了一个模块

var test = function () {
    var validate = function () {
        alert("fg");
    };
    return {
        validate: validate
    };
}();
现在,我可以使用字符串访问上述模块吗?例如:

$(function () {
    var s = "test"; 
    s.validate();   // error  
});

嗯,我试过了,但到目前为止运气不好,因为“s”是字符串。是否有任何方法将此字符串转换为上述模块对象并访问
validate
方法

您可以使用
eval()

旁注:

仔细使用
eval()
。从

eval()是一个危险的函数,它以调用方的权限执行传递给它的代码。如果使用可能受恶意方影响的字符串运行eval(),则最终可能会在具有网页/扩展名权限的用户计算机上运行恶意代码


您可以使用
eval()

旁注:

仔细使用
eval()
。从

eval()是一个危险的函数,它以调用方的权限执行传递给它的代码。如果使用可能受恶意方影响的字符串运行eval(),则最终可能会在具有网页/扩展名权限的用户计算机上运行恶意代码


s是一个字符串,因此如果要在s上调用validate,则必须扩展字符串原型

String.prototype.validate = function () {
    return alert("fg")
};

但是如果您想创建一个名为“Test”的对象


s是一个字符串,因此如果要在s上调用validate,则必须扩展字符串原型

String.prototype.validate = function () {
    return alert("fg")
};

但是如果您想创建一个名为“Test”的对象


另一种方法是将函数声明为全局函数

window.test=函数(){
var validate=函数(){
警报(“fg”);
};
返回{
验证:验证
};
}();
$(函数(){
var s=“测试”;
窗口[s]。验证();
});

另一种方法是将函数声明为全局函数

window.test=函数(){
var validate=函数(){
警报(“fg”);
};
返回{
验证:验证
};
}();
$(函数(){
var s=“测试”;
窗口[s]。验证();
});

我想你误读了这个问题。请注意字符串的值与模块的名称是如何相同的。我认为您误读了这个问题。请注意字符串的值与模块的名称是如何相同的。如果将
test
函数声明为全局函数,则可以。它是一个全局函数还是名称空间?你能解释一下这样做的目的吗?我不太清楚您在这里想做什么。如果您将
test
函数声明为全局函数,您可以这样做。它是一个全局函数还是名称空间?你能解释一下这样做的目的吗?我不太清楚你想在这里做什么。我认为有必要补充一点,你应该不惜一切代价避免
eval
。这是缓慢而危险的,通常表明代码中的设计很差。OP应该重新考虑程序设计,而不是合并
eval
。我认为有必要补充一点,您应该不惜一切代价避免
eval
。这是缓慢而危险的,通常表明代码中的设计很差。OP应该重新考虑程序设计,而不是合并
eval
var test = function () {
    var validate = function () {
        alert("fg");
    };
    return {
        validate: validate
    };
}();

$(function () {
    var s = test(); // Here 
    s.validate();   
});