首頁 >web前端 >js教程 >JavaScript趣題:形參與實參的映射

JavaScript趣題:形參與實參的映射

黄舟
黄舟原創
2017-01-22 14:55:572122瀏覽

作為函數函數的擴展,你需要在一個函數被呼叫時,在它的形參和實參之間,建立正確的映射關係。

先來看下面的例子:

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方法,設置它的上下文為arguments對象,從索引1處開始截取實參,獲得實參列表的數組形式。

最後,以實參列表為基準,建立關聯數組,形參為key,實參為value,並且傳回關聯數組。

這樣,這個參數映射函數就完成了。

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中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn