ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の興味深い質問: 仮パラメータと実パラメータのマッピング

JavaScript の興味深い質問: 仮パラメータと実パラメータのマッピング

黄舟
黄舟オリジナル
2017-01-22 14:55:572084ブラウズ

関数 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) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。