私は配列を持つ関数に引数として渡す:JavaScriptの:変数の配列に文字列の配列に変換し、例えば、
argumentsArray = ["arg1", "arg2"];
そして、私は機能があります。今
function1 = function() {
console.log(arg1);
console.log(arg2);
};
をもちろんfunction1
を実行すると、arg1
とarg2
が定義されていないため、エラーが発生します。
function1("string1", "string2");
// will log "string1" and "string2"
しかし、問題:我々はそれには2つの引数を渡すとき
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
がまだ定義されていません。彼らはまだ弦や他のものではありません。
["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.
それでは、私が本当に探していることは、これらの文字列の名前を持つ変数の配列に文字列の配列を回す機能がある:私のコードは次のようになります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
を変更することができないので、別の関数で引数リストを作成する必要があります。私はもちろん、私はは変更することができますが、私が取り組んでいるプロジェクトは、引数を取得するために配列を使用しています。
のように、引数にアクセスすることができますFUNCTION1したものを渡しますとき、それは間違いなく間違っているのです。この特定の苦境にはどうやって入りましたか? – deceze
function1 w/argumentsオブジェクトに渡されたarguemtnsにアクセスするには、this - > arguments [index]のようにします。 arg1とarg2を定義することは不要です。 –
あなたは、変数の意味と使い方について根本的な誤解があるようです。あなたの頭に立って、 'eval'や' window [varname] 'のようなものを使わなくても、文字列として変数名から変数に、あるいはその逆に変数名からマッピングすることはかなり不可能です。基本的には、コードを構造化する必要があります。名前を文字列として使用してアクセスできる名前付きの値を使用する場合は、オブジェクトとプロパティを使用します。 –