使用字符串变量

时间:2015-06-05 09:25:09

标签: javascript jquery

我有一个用JavaScript创建的模块。

var test = function () {
    var validate = function () {
        alert("fg");
    };
    return {
        validate: validate
    };
}();

现在,我可以使用字符串访问上述模块吗?例如:

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

嗯,我试过,但到目前为止没有运气,因为" s"是字符串。有没有办法将此字符串转换为上述模块对象并访问validate方法?

3 个答案:

答案 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;
&#13;
&#13;