2012-06-14 2 views
1

은의 당신이 인수의 이름 (a와 b) (SECURITY) 기능을 비활성화에서 얻을 수있는 방법이 있나요 당신이Javascript에서는 함수가 있으면 이름으로 인수를 얻을 수 있습니까?

var funct=function(a,b){ 
    return a+b; 
}; 
console.log(funct); 

있다고 가정 해 봅시다? 만약 당신이 그 기능에 있다면 당신은 그들에게 어떤 접근이 있습니까? "arguments"는 배열과 같은 객체를 제공하지만 함수가 선언되었을 때 이름을 얻을 수 있도록 인수와 같은 맵 또는 객체와 같은 표현을 제공하는 것은 무엇입니까?

+4

왜 필요한가요? – epascarello

+1

짧은 답변? No. –

+1

실제 이름을 사용하여 함수에 인수를 이름으로 액세스 할 수 있습니다. 가변 인수 함수를 구현하는 데 'argument' 개체를 사용하는 것이 가장 좋습니다. 동적 이름 지정된 인수를 원하면 options-hash 패턴을 사용하십시오. (하나의 jQuery와 다른 라이브러리는 널리 사용됩니다.) – millimoose

답변

2

한 가지 방법은 문자열로 기능을 켜고 아직 단서가 없다

jsFiddle

var funct=function(a,b){ 
    return a+b; 
}; 
var re = /\(([^)]*)/; 
var daArgs = funct.toString().match(re)[1].split(/,\s?/); 
console.log(daArgs); 
그것을 구문 분석하는 것입니다 왜 당신이 그것을 필요로하는지.

+0

필자는 그가 외부 *가 아닌 함수 내부에 인수 이름을 원한다고 생각했습니다. –

+1

@Rocket'funct.toString()'을 더 이상 사용되지 않는'arguments.callee.toString()'으로 바꾸지 만 엄격 모드에서는 실행하지 않습니다. :) – epascarello

5

아니요,이 작업을 수행 할 수 없습니다. 변수의 이름을 문자열로 가져 오는 방법은 없습니다.

정말로 필요한 경우 여러 매개 변수를 전달하는 대신 개체를 전달하는 것이 좋습니다.

var funct=function(args){ 
    var argsNames = Object.keys(args); // Get the keys of the args object 
    console.log(argsNames); // ['a','b'] 
    return args.a + args.b; 
}; 

다음과 같이 호출 :

funct({ 
    a: 12, 
    b: 2 
}); 
+1

은 object.keys도 이와 같이 사용할 수 있습니다. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys – ossek

+0

12와 2 !!! 내 대답처럼 –

+0

@WaqarAlamgir : 그게 무슨 소리 죠? –

관련 문제