从String动态创建Javascript对象并将对象作为函数的参数

时间:2014-03-27 18:05:41

标签: javascript javascript-objects

我想从Javascript String创建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) {
  // ...
}

理想情况下,代码必须适用于Javascript数组中名为" arrayOfName"的所有元素。

2 个答案:

答案 0 :(得分: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.map require,就像这样

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

如果你有这样的功能

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

如果你想用所有加载的模块调用它,那么你会做这样的事情

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

答案 1 :(得分:1)

使用函数原型的.apply函数

myFunctionTest.apply(this, arrayOfName);

注意:您可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply