从字符串动态创建Javascript对象,并将对象作为函数的参数

Dynamically create Javascript Object from String and put object as parameters of function

本文关键字:对象 函数 参数 动态 字符串 创建 Javascript      更新时间:2023-09-26

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

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

使用函数原型的.apply函数

myFunctionTest.apply(this, arrayOfName);

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

您可以这样使用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));