2016-12-30 75 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(包括「this」)有一個函數名稱爲無論該變量的值是什麼,它將被這些參數調用。