将字符串转换为可执行函数javascript

时间:2016-07-22 03:12:14

标签: javascript jquery

var arr = ['abc','xyz'];

$.each(arr, function(i,val){
var val = val; //where I got abc, xyz here
if(some condition){
   //run abc function but I don't want to do abc(), possible?
}

});

function abc(){}
function xyz(){}

我可以将字符串(val)转换为可执行函数,而不是硬编码我的函数名称,如abc()。通过这种方式,我可以通过在我的数组中添加值来执行任何功能。

4 个答案:

答案 0 :(得分:0)

假设您的功能位于全局范围内,您可以通过window[functionname]()

访问它们



var arr = ['abc','xyz'];

$.each(arr, function(i,val){
  window[val]();
});

function abc() {
  console.log('In abc()');
}

function xyz(){
  console.log('In xyz()');
}

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

答案 1 :(得分:0)

不是传入字符串,而是传递对函数本身的引用:

&#13;
&#13;
var arr = [abc, xyz];

$.each(arr, function(i, fn) {
  if (true) {
    fn();
  }
});

function abc() {
  console.log('abc');
}

function xyz() {
  console.log('xyz');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这两个函数都应该是公共父对象的一部分。因此可以通过其属性名称访问它。 这两者都是window对象的一部分。

var arr = ['abc', 'xyz'];

$.each(arr, function(i, val) {
  if (true) { // some condition.
    window[val]();
  }

});

function abc() {
  console.log('Inside the FN abc');
}

function xyz() {
  console.log('Inside the FN xyz');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 3 :(得分:0)

eval(str)将运行字符串str中的代码。您确实需要信任str并确保用户可以访问它。