2014-03-27 58 views
1

我想從Javascript字符串創建Javascript對象。從字符串動態創建Javascript對象並將對象作爲函數的參數

var arrayOfName = new Array(); 
arrayOfName.push("module1"); 
arrayOfName.push("module2"); 
arrayOfName.push("module3"); 
arrayOfName.push("module4"); 

對於這個例子,我想創建4個對象:module1,module2,module3和module4。

後來,我怎麼能通過這些對象作爲函數的參數?像這樣:

this.myFunctionTest = function myFunctionTest(module1, module2, module3, module4) { 
    // ... 
} 

理想情況下,代碼必須適用於名爲「arrayOfName」的Javascript數組中的所有元素。

回答

1

您可以使用Function.prototype.apply這樣

myFunctionTest.apply(this, arrayOfName); 

apply函數傳遞的arrayOfName所有元素作爲參數傳遞給myFunctionTest

隨着參數數量的增加,您可能不希望或難以維護數量或參數。別擔心,JavaScript已經涵蓋了:)它有一個叫做arguments的東西,它是一個像對象一樣的數組。您可以使用arguments[0]訪問第一個參數,如訪問常規數組對象。

var arrayOfName = []; 
arrayOfName.push("module1"); 
arrayOfName.push("module2"); 
arrayOfName.push("module3"); 
arrayOfName.push("module4"); 

function myFunctionTest(param1, param2, param3) { 
    console.log(param1, param2, param3); 
    console.log(arguments); 
} 

myFunctionTest.apply(this, arrayOfName); 
// module1 module2 module3 
// { '0': 'module1', '1': 'module2', '2': 'module3', '3': 'module4' } 

如果你想要求節點模塊,用這種方法

var modules = ["lodash", "underscore", "q"]; 
require.apply(this, modules); 

但是,如果你想獲得由require爲每個模塊返回的對象,那麼你最好的選擇是使用Array.prototype.maprequire,這樣

console.log(modules.map(require)); 

如果你有這樣

功能
function modules(module1, module2, ...) { 
    ... 
} 

如果你想與所有加載的模塊調用它,那麼你會做這樣的事情

modules.apply(this, modules.map(require)); 
+0

這是否會工作,如果我想通過作爲要求的參數?像'require(arrayOfPath,function(arrayOfName){})' – wawanopoulos

+0

@wawanopoulos你的意思是,你想同時「需要」多個模塊? – thefourtheye

+0

是的,這就是我想要做的。 – wawanopoulos

1

使用函數原型

myFunctionTest.apply(this, arrayOfName); 

.apply功能:可以在這裏找到更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

+0

如果我想要作爲require的參數傳遞,這是否會工作?像'require(arrayOfPath,function(arrayOfName){})' – wawanopoulos

+0

你能解釋一下嗎?答案是肯定的,但我對變量的名稱以及框架的修改感到困惑 – SergeS