>  기사  >  웹 프론트엔드  >  JavaScript의 흥미로운 질문: 형식 매개변수와 실제 매개변수의 매핑

JavaScript의 흥미로운 질문: 형식 매개변수와 실제 매개변수의 매핑

黄舟
黄舟원래의
2017-01-22 14:55:572084검색

함수 함수의 확장으로, 함수 호출 시 형식 매개변수와 실제 매개변수 간의 올바른 매핑 관계를 설정해야 합니다.

먼저 다음 예를 살펴보겠습니다.

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 중국어 웹사이트(www.php.cn)를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.