我有一个用JavaScript创建的模块。
var test = function () {
var validate = function () {
alert("fg");
};
return {
validate: validate
};
}();
现在,我可以使用字符串访问上述模块吗?例如:
$(function () {
var s = "test";
s.validate(); // error
});
嗯,我试过,但到目前为止没有运气,因为" s"是字符串。有没有办法将此字符串转换为上述模块对象并访问validate
方法?
答案 0 :(得分:2)
您可以使用eval()
。
var test = function () {
var validate = function () {
alert("fg");
};
return {
validate: validate
};
}();
$(function () {
var s = eval("test"); //Here
s.validate();
});
旁注:
仔细使用eval()
。来自 docs :
eval()是一个危险的函数,它使用调用者的特权执行它传递的代码。如果您使用可能受恶意方影响的字符串运行eval(),您最终可能会使用您的网页/扩展程序的权限在用户的计算机上运行恶意代码。
答案 1 :(得分:2)
是一个String,所以如果要在s上调用validate,则必须扩展String原型
String.prototype.validate = function () {
return alert("fg")
};
或
但是如果你想创建一个名为“Test”的对象
var test = function () {
var validate = function () {
alert("fg");
};
return {
validate: validate
};
}();
$(function () {
var s = test(); // Here
s.validate();
});
答案 2 :(得分:0)
另一种方法是将该函数声明为全局。
window.test = function () {
var validate = function () {
alert("fg");
};
return {
validate: validate
};
}();
$(function () {
var s = "test";
window[s].validate();
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;