ホームページ > 記事 > ウェブフロントエンド > JavaScript の興味深い質問: 仮パラメータと実パラメータのマッピング
関数 function の拡張として、関数が呼び出されるときに、その仮パラメーターと実際のパラメーターの間の正しいマッピング関係を確立する必要があります。
まず次の例を見てください:
function func1(arg1, arg2) { ... } var map = createArgumentMap(func1,'valueOfArg1', 'valueOfArg2'); console.log(map['arg1']); // writes 'valueOfArg1' console.log(map['arg2']); // writes 'valueOfArg2'
このマッピング関数は、最初のパラメータとして関数オブジェクトを受け取り、長さが不明な実際のパラメータ リストを受け取ります。このパラメータの仮パラメータと実際のパラメータ リストの間のマッピングを確立する必要があります。関数オブジェクト。連想配列で表され、返されます。
実際のパラメータリストと関数パラメータ定義は同じ順序であり、それらはすべて有効で正当なパラメータです。
このトピックは、仮パラメータと実際のパラメータの間のマッピングを確立することです。次に、最初に関数オブジェクトの toString() 文字列形式を取得し、その仮パラメータ リストをインターセプトします。
次に、実パラメータリストの長さが不明なため、Array.prototype.sliceメソッドを使用し、そのコンテキストを引数オブジェクトに設定し、インデックス1から始まる実パラメータをインターセプトして、実パラメータの配列形式を取得します。リスト。
最後に、実パラメータリストに基づいて、仮パラメータをキー、実パラメータを値として連想配列を作成し、その連想配列を返します。
このようにして、パラメータマッピング機能が完成します。
String.prototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g, ""); }; var findArgs = function(funcStr){ var bracket1 = funcStr.indexOf("("); var bracket2 = funcStr.indexOf(")"); var argsStr = funcStr.slice(bracket1+1,bracket2); var args = argsStr.split(","); return args.map(function(e){ return e.trim(); }); }; function createArgumentMap(func) { var args = findArgs(func.toString()); var realArgs = Array.prototype.slice.call(arguments,1); var map = {}; for(var i=0;i<realArgs.length;i++){ map[args[i]] = realArgs[i]; } return map; }
上記は、JavaScript に関する興味深い質問の内容です。つまり、仮パラメータと実際のパラメータのマッピングについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。