的JavaScript:转换字符串数组变量数组,并将其作为参数传递给函数
问题描述:
我有一个数组,例如:的JavaScript:转换字符串数组变量数组,并将其作为参数传递给函数
argumentsArray = ["arg1", "arg2"];
而且我有一个函数:
function1 = function() {
console.log(arg1);
console.log(arg2);
};
现在当然执行function1
会抛出错误,因为arg1
和arg2
没有定义。但我不想定义这些,我希望他们作为参数,就像这样:
function1("string1", "string2");
// will log "string1" and "string2"
但问题:
function1 = function (arg1, arg2) {
console.log(arg1);
console.log(arg2);
};
现在,当我们通过两个参数给它,我们可以执行function1
是,我无法更改function1
的源代码。我无法编辑它的参数。我知道了bind()
和apply()
功能,但他们会做错误的事情,因为在实际应用中的字符串:
getFunction1WithArgumentsFromArray = function() {
return function() {
return function1.apply(this, argumentsArray);
};
};
getFunction1WithArgumentsFromArray();
// would return function1("arg1", "arg2");
的事情是,arg1
和arg2
尚未确定。他们不是字符串或其他任何东西。我的代码看起来是这样的:
function1 = function() {
console.log(arg1);
console.log(arg2);
};
argumentsArray = ["arg1", "arg2"];
defineArgs = function() {
arg1 = "hey";
arg2 = "hello";
};
getFunction1WithArgumentsFromArray = function (argumentsArray) {
argumentsToUse = convertArrayOfStringsToArrayOfVariables(argumentsArray);
// HOW???
return function() {
return function1(argumentsToUse[0], argumentsToUse[1]);
};
// or what should i put here???
};
getFunction1WithArgumentsFromArray();
// should return this:
// function1 = function(arg1, arg2) {
// console.log(arg1);
// console.log(arg2);
// };
// without executing it.
那么我现在真正需要的是,原来的字符串数组的数组变量与这些字符串的名称的功能:
["arg1", "arg2"] --> [arg1, arg2]
但直接做这件事会成为一个问题,因为JavaScript会搜索这些变量。正如我所说,这些变量没有被定义...
一个我知道我必须是使用apply()
和传递一个数组with eval("string")
就像这样:
getFunction1WithArgumentsFromArray = function() {
return function() {
return function1.apply(
this,
[eval(argumentsArray[0]), eval(argumentsArray[1])]
);
};
};
getFunction1WithArgumentsFromArray();
// would return "arg1 is not defined", because eval() executes the function as I define it
这可能对你来说似乎是非常不必要的,但正如我已经说过的,我不能更改function1
,所以我必须在另一个函数中创建它的参数列表。我的意思是,当然我可以改变它,但我正在处理的项目,使用数组来获取参数。
答
正如我在我的评论中所说的,定义arg1和arg2似乎是不必要的,因为无论你在创建什么对象,你都必须持有一些对它的引用。
而当你将这些信息传递给FUNCTION1您可以轻松地访问这些参数是这样
function1 = function() {
var i;
for(i=0; i<arguments.length;i++){
console.log(arguments[i]); // do anything with arguments[i] == arg1, arg2,
...
}
};
如果'function1'试图与单位出没有定义的变量工作,它可以说是错误的。你怎么进入这个特殊的困境......? – deceze
您可以访问传递给function1 w/arguments对象的arguemtns,像这样 - > arguments [index]。所以定义arg1和arg2似乎是不必要的。 –
你似乎对变量的含义和使用有一个根本性的误解。将变量名映射为变量,反之亦然,而不用站在你的头上,并使用像'eval'或'window [varname]'这样的东西几乎是不可能的。基本上,你需要构建你的代码。如果您想要命名值,则可以使用它们的名称作为字符串来访问,然后使用对象和属性。 – 2017-05-07 05:05:57