2016-04-14 6 views
0

私のjavascriptは12以上の関数を持ち、すべての関数が以下の関数を呼び出します。文字列変数から来るパラメータでjava-script関数を呼び出す方法

address_bar(gender, age_min, age_max, religion, country, address, zip-code, telephone);

私の質問は、次のようにこの関数を呼び出すことが可能です。

var string = 'gender, age_min, age_max, religion, country, address, zip-code, telephone'; 

コール

address_bar(string); //not working

として機能私はパラメータのために未定義の変数エラーが発生します。

+1

なぜオブジェクトを作成してそのオブジェクトを機能させるのですか? – Satpal

+0

'eval'を使うことができますが、それを使う前にリスクを理解することができます。 – brso05

+0

文字列である1つのパラメータを渡すので、いいえではありません。分割して適用するといくつかの魔法を使うことができますが、いずれかのフィールドにカンマがあると困っています。配列やオブジェクトを使う方がよいでしょう。 – epascarello

答えて

1

代替方法が

var args = [gender, age_min, age_max, religion, country, address, zip-code, telephone]; 
address_bar.apply(null,args) 
+0

変数がすべて既にある場合は、直接メソッドを呼び出すだけではどうですか? –

+0

address_bar(性別、年齢、年齢、宗教、国、住所、郵便番号、電話番号)はまったく同じで、読みやすく、少ないコードです。 –

+0

@ MarkEvaulしかし、OPは彼が何度も何度もこのメソッドを呼び出しており、リファクタリングをしたいと言っています。 – gurvinder372

1

文字列をコンマで配列に分割し、結果のパラメータをapply経由で関数に渡すことができますが、警告があります。すべてのパラメータは文字列なので、数値とあなたが期待しているタイプに基づいて結果をループして解析する別のステップがあります。また、予想される値のどれもコンマを持たないように注意するか、結果を途中で分割することに注意しなければなりません。ここで

は、最も基本的な場合の例です:

address_bar.apply(null, string.split(',')); 
+0

すでに文字列がアセンブルされていることを前提としていますが、これが正しい解決方法です。他のすべてのソリューションは、既に持っている変数を使って直接メソッドを呼び出すだけではありません。 –

-1

のような配列にそれらを置くことができこれは正確に何をしたいん:

var x = [ 'gender', 'age_min', 'age_max', 'religion', 'country', 'address', 'zip-code', 'telephone' ]; 
address_bar.apply(this, x); 

hereの詳細については、

をご覧ください。
+0

になりますか?技術的には正しいのですが、すでにすべての変数を持っていれば、 –

0

機能を変更せずに1つの文字列として渡すことはできません。少なくとも3つのオプションがあります。それぞれに機能を実行し

var gender = 'gender', age_min = "age_min", ... , telephone = "telephone"; 

と:あなたのような機能に "プッシュ" してみてください

function adress_bar(string){ 
    //split string and do soemthign with data; 
} 

adress_bar(string); 

2)変更/スプリットデータ:

1)あなたは1つの文字列を受け入れるように機能変更これらの変数のうち

adress_bar(gender, age_min, ... , telephone); 

3)引数の配列またはオブジェクトを作成し、それらをすべて1つに渡します。

var array = ["gender", "age_min", "age_max", "religion", "country", "address", "zip-code", "telephone"]; 

function address_bar(some_array){ 
//do something with some_array 
} 

address_bar(array); 
+0

なぜdownvoted OPが単一の文字列を多くの引数として渡そうとしたのかわからないので、関数と引数の仕組みを説明しました。 – Jasiu

関連する問題