如何在JS中使用动态名称调用函数

时间:2017-05-01 21:08:14

标签: javascript canvas

我试图按照我发布的相同示例来调用此函数。所以问题是我用来调用函数的方法不起作用......我需要类似的东西因为我将通过监听事件调用这些函数。有人知道马上去做吗?

THX。

//variables
var ta = 3213;
var da = 44;
var s = [];

//Create string representation of function
s[1] = "function test0(){  alert(" + da + "); }";
s[0] = "function test1(){  alert(" + ta +"); }";

//"Register" the function
for(i=0; i< s.length; i++){
	eval(s[i]);
}

// calling the function
this["test"+1];

5 个答案:

答案 0 :(得分:1)

通常我们应该避免使用eval。您可以尝试不使用eval并使用更简单的代码:

x1 <- c(4,17,25)

s_function <- function(x){
  z <- 0
  for( i in x ) {
    z <- z + i
               }
return(z)}

s_function(x1)

或者代码中的简单操作:

//variables
var ta = 3213;
var da = 44;
var s = [];

//Create string representation of function
s[1] = function test0(){  alert(" + da + "); };
s[0] = function test1(){  alert(" + ta +"); };

s.forEach((fun) => { this[fun.name] = fun;});

// calling the function
this["test"+1]();

编辑:

如果您正在使用字符串和eval只是因为您将函数名称作为字符串,而是可以创建一个对象:

this["test"+1]();

答案 1 :(得分:0)

最后用();

调用它

&#13;
&#13;
//variables
var ta = 3213;
var da = 44;
var s = [];

//Create string representation of function
s[1] = "function test0(){  alert(" + da + "); }";
s[0] = "function test1(){  alert(" + ta +"); }";

//"Register" the function
for(i=0; i< s.length; i++){
	eval(s[i]);
}

// calling the function
this["test"+1]();
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用Function对象创建一个函数。

const data = "test";
const func1 = new Function("alert("+data+")");
func1(); // alert shows  "test"

您可以添加参数

const data = "test";
const func1 = new Function("arg1","alert(arg1)");
func1("Test argument"); // alert shows "Test argument" 

您可以创建命名的函数列表

const myFunctionList = {};
function createFunction(name,funcBody){
    myFunctionList[name] = new Function(funcBody);
}
createFunction("test1","alert('test function');");
myFunctionList.test1();  // alert shows 'test function'
// or
myFunctionList["test1"]();

答案 3 :(得分:0)

试试这个:

let dynamic_func_name = 'alert';
let para_1 = 'Hello';
(new Function(`${dynamic_func_name}('${para_1}')`))()

答案 4 :(得分:0)

另一种可能更简洁的方法:

var TestClass = function() {
    this.test1 = function() {};
    this.test2 = function() {};
    this.test3 = function() {};
...
    this.testN = function() {};
}

var test = new TestClass();

要调用名为“test1”的方法,您只需执行以下操作:

test['test1']();

等等。这是有效的,因为可以通过数组表示法访问对象的属性。