jsは文字列を関数として呼び出します.
1028 ワード
使用シーン:
開発では、異なるビジネスシーン(10近く)を選択し、共通のダイアログを開き、ダイアログの確認ボタンをクリックして、種類によって異なる方法を呼び出す.if elseは考慮しないで、タイプは多すぎて、コードの冗長性.
解決策:
ビジネスポップアップダイアログを選択すると、グローバル変数を定義し、異なる業務typeを格納します.サービスtypeの値は呼び出し方法の関数名です.
方法1:eval(str)
eval関数は、ある文字列を計算し、JavaScriptコードを実行します.なお、evalメソッドのパラメータは文字列だけであり、文字列でない場合は呼び出しではなく、直接に送信値を返します.eval方法は効率が低い上に、安全ではないので、使用を勧めません.
関数はjs内でオブジェクトに保存できますので、オブジェクトの属性を通じてアクセスし、文字列メソッドを呼び出します.グローバル関数宣言は、グローバルオブジェクトの属性になります.グローバルオブジェクトは、コンテキスト実行に入る前に作成された一意のオブジェクトです.ブラウザの実行環境において、グローバルオブジェクトはwindowオブジェクト です.属性アクセスは、ポイントマーカーまたは括弧マーカーを使用することができます.ここでは、ポイントアクセスには識別子が必要であり、二括弧アクセスには識別子対応文字列
開発では、異なるビジネスシーン(10近く)を選択し、共通のダイアログを開き、ダイアログの確認ボタンをクリックして、種類によって異なる方法を呼び出す.if elseは考慮しないで、タイプは多すぎて、コードの冗長性.
解決策:
ビジネスポップアップダイアログを選択すると、グローバル変数を定義し、異なる業務typeを格納します.サービスtypeの値は呼び出し方法の関数名です.
方法1:eval(str)
eval関数は、ある文字列を計算し、JavaScriptコードを実行します.なお、evalメソッドのパラメータは文字列だけであり、文字列でない場合は呼び出しではなく、直接に送信値を返します.eval方法は効率が低い上に、安全ではないので、使用を勧めません.
function test(str){
alert(str);
}
var a='test';
var b='345';
eval(a+'('+123+')');
eval(a+'(b)');
方法二:方法名を属性名とします.関数はjs内でオブジェクトに保存できますので、オブジェクトの属性を通じてアクセスし、文字列メソッドを呼び出します.
function test(str){
alert(str);
}
var param=' ';
window['test'](param);//
window['test'].call(this,'param');
が使用されている.関数が他のオブジェクト属性であれば、同じ方法で呼び出すこともできる.