javascript 使用存储在变量上的名称调用方法

javascript call a method with a name stored onto a variable

我是 js 编程的新手。我正在为测试开发工作。我需要使用存储在文件中的名称调用 js 函数。例如我有两个文件,

file1.sah

//sah is sahi extension but internally the file has javascript code only
function test(){
  this.var1 = 100;
  this.logFunc = function(a,b,c){

    console.log(a + b + c + this.var1);
  }
}

file2.sah

include file1.js //file1.js module is referenced
var obj = new test();
var $method = "logFunc";
var $params = {"a" : 1, "b" : 2, "c" : 3};

//wanted to call the method "test" from file1 and pass all arguments as like key & value pair in object
//I cannot use window objects here
eval($method).apply(obj, $params);
//eval works but I couldn't pass the object params I have. For simplicity I //have initialised params in this file. In my real case it will come from a
//different file and I will not know the keys information in the object 

您可以使用 "bracket notation"。

someObject [ someVariable ] ( theArguments ) 

如果 someObject(包括 "this")有一个函数,无论该变量的值是什么,都将使用这些参数调用它。

您可以使用括号表示法动态访问对象 属性。

但在您的示例中,您的方法名称似乎有误。 test是构造函数的名字,方法调用的是logFunc。需要先调用构造函数,它会return一个对象,然后就可以动态访问方法了

要动态提供参数,您必须将它们放入数组中,而不是对象中。然后就可以用Function.prototype.apply()调用方法了

var obj = new test();
var method = 'logFunc';
var params = {"a" : 1, "b" : 2, "c" : 3};
var param_array = [params.a, params.b, params.c];

obj[method].apply(obj, param_array);