2016-12-30 3 views
-2

Je suis très nouveau à la programmation js. Je travaille pour le développement de tests. J'ai besoin d'appeler une fonction js avec le nom qui est stocker sur un fichier. Par exemple, j'ai deux fichiers,javascript appeler une méthode avec un nom stocké sur une variable

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

Le nom de la méthode est 'logFunc', pas' test'. – Barmar

Répondre

0

Vous pouvez accéder à une propriété d'objet dynamiquement en utilisant la notation de parenthèse.

Mais dans votre exemple, vous semblez avoir un mauvais nom pour la méthode. test est le nom du constructeur, la méthode est appelée logFunc. Vous devez d'abord appeler la fonction constructeur, retourner un objet, puis accéder dynamiquement à la méthode.

Pour fournir les arguments de manière dynamique, vous devez les placer dans un tableau, pas un objet. Ensuite, vous pouvez utiliser Function.prototype.apply() pour appeler la méthode.

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

Vous pouvez utiliser "la notation de support".

someObject [ someVariable ] (theArguments) 

Si someObject (y compris « ce ») a une fonction nommée quelle que soit la valeur de cette variable est, elle sera appelée avec ces arguments.