2017-05-07 32 views
0

我有一个数组,例如:的JavaScript:转换字符串数组变量数组,并将其作为参数传递给函数

argumentsArray = ["arg1", "arg2"]; 

而且我有一个函数:

function1 = function() { 
    console.log(arg1); 
    console.log(arg2); 
}; 

现在当然执行function1会抛出错误,因为arg1arg2没有定义。但我不想定义这些,我希望他们作为参数,就像这样:

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"); 

的事情是,arg1arg2尚未确定。他们不是字符串或其他任何东西。我的代码看起来是这样的:

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,所以我必须在另一个函数中创建它的参数列表。我的意思是,当然我可以改变它,但我正在处理的项目,使用数组来获取参数。

+0

如果'function1'试图与单位出没有定义的变量工作,它可以说是错误的。你怎么进入这个特殊的困境......? – deceze

+0

您可以访问传递给function1 w/arguments对象的arguemtns,像这样 - > arguments [index]。所以定义arg1和arg2似乎是不必要的。 –

+3

你似乎对变量的含义和使用有一个根本性的误解。将变量名映射为变量,反之亦然,而不用站在你的头上,并使用像'eval'或'window [varname]'这样的东西几乎是不可能的。基本上,你需要构建你的代码。如果您想要命名值,则可以使用它们的名称作为字符串来访问,然后使用对象和属性。 – 2017-05-07 05:05:57

回答

1

正如我在我的评论中所说的,定义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, 
    ... 
} 
}; 
相关问题