2014-04-14 3 views
0

의 손길이 닿지 않은 미들웨어를 통해 몇 가지 인수를 전달합니다 원래 함수. 원래 함수는 매우 동적입니다 (4 개의 인수를 사용하는 RabbitMQ 또는 2를 사용하는 Redis 또는 1이 필요한 단위 테스트 드라이버 인 커넥터입니다). 그래서 미들웨어는 실제로 얼마나 많은 인수를 받을지 알지 못합니다 .자바 스크립트 내가이 보이는 중간 제품을

이것을 사용하면 : var args = Array.prototype.slice.call(args, 1)은 진정한 주장을 얻는 좋은 시작처럼 보입니다. 그러나, 저는 방금 인수 2를 하나의 인수로 바꾸었지만, 그것은 첫 번째 변수에 배열로 전달 될 것이라고 생각합니다. 내가 원하는 건 아니야. 이 일을 올바르게하는 방법?

+0

및/또는 http://stackoverflow.com/q/17920090/218196 –

+0

@FelixKling 예, 실종'apply'. 우선 좋다. – djechlin

+0

Btw, ES6에서는 rest 매개 변수를 사용합니다. 여기서 arguments 객체를 슬라이싱하는 대신'function foo (first, ... args)'를 수행 할 수 있습니다. 매우 편리 할 수 ​​있습니다. –

답변

0

당신은 올바른 인수 (첫 번째 인수 제외)를 얻는 방법을 꽤 많이 잡았습니다. arguments 배열을 다음 함수로 보내려면 원래 함수에 새로운 배열 .apply()을 입력하기 만하면됩니다.

apply()는 함수 원형 (Function.prototype.apply) 방법이므로 어떤 함수를 호출 할 수있다. 이 함수는 호출 할 때 문맥이 (또는 this)이고 해당 함수 호출의 인수로 사용될 Array이라는 두 인수를 사용할 수 있습니다. 귀하의 코드를 기반으로, 나는 그 함수가 글로벌 컨텍스트에서 실행되었다고 가정하므로 첫 번째 인수는 null으로 설정됩니다.

function(middleWareData) { 
    if (middleWareData.passes()) { 
     origFunction.apply(null, Array.prototype.slice.call(arguments, 1)); 
    } 
} 
관련 문제