2016-12-30 9 views
-2

Я очень новичок в программировании js. Я работаю над разработкой тестов. У меня есть требование вызвать функцию js с именем, которое хранится в файле. Например, у меня есть два файла,javascript вызов метода с именем, хранящимся в переменной

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 
+0

Имя метода - 'logFunc', а не' test'. – Barmar

ответ

0

Вы можете динамически получить доступ к объекту, используя нотацию в виде скобок.

Но в вашем примере у вас похоже неправильное имя для метода. test - это имя конструктора, метод называется logFunc. Сначала нужно вызвать функцию конструктора, она вернет объект, а затем вы сможете получить доступ к этому методу динамически.

Чтобы динамически приводить аргументы, вы должны поместить их в массив, а не в объект. Затем вы можете использовать метод 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); 
-1

Вы можете использовать "кронштейн обозначения".

someObject [ someVariable ] (theArguments) 

Если SomeObject (в том числе и «это») имеет функцию с именем независимо от значения этой переменной, то она будет с этими параметрами.