2012-08-31 2 views
1

나는 일반적으로 매개 변수의 수를 기대 멤버 함수에 배열을 전달하는 apply()를 사용하여 기존의 일부 자바 스크립트 코드를 수정하려고 해요 : 새로운 코드는 여전히 매개 변수의 수를 취배열 앞에 추가 매개 변수와 함께 JavaScript의 "적용"메서드를 사용하는 방법은 무엇입니까?

oldFoo: function(arg /* , ..., argN */) { 
    ... 
} 

var ary = ... 

oldFoo.apply($, ary) 

... other stuff using ary ... 

을하고 난 여전히이 배열로 그들에 전달하는, 그러나 나는 또한

newFoo: function(someObject, arg /* , ..., argN */) { 
    ... 
} 

var ary = ... 

newFoo.apply($, ???, ary) 

... other stuff using ary ... 

그래서 내가 같은 자리에서 수정 배열 방법과 ary의 새 버전을 만들 수 있습니다 알고 배열하기 전에 새로운 매개 변수에 전달해야 pop/push/shift/unshift하지만 내 배열로 여러 가지 일을하고 싶어하므로 제 위치에서 수정하고 싶지는 않습니다.

나는 새로운 배열을 someObject 앞에 붙임으로써 새로운 임시 배열을 만들 수 있다는 것을 알고 있지만 매번 여러 줄의 코드를 사용하는 것처럼 보입니다.

같은 수의 줄에서 내가하고 싶은 것을 성취하기위한 더 표현적인 방법이 있습니까? 내가 apply에 대해 또는 행렬 함수를 수정하지 않고 새로운 배열을 반환하는 것에 대해 빠진 것이 있습니까? 저는 이미 jQuery를 사용하고 있습니다. 그래서 바닐라 자바 ​​스크립트가 가지고 있지 않은 유용한 것이 있다면 그것은 훌륭합니다.

+0

'apply ($, ???, ary)'는 작동하지 않습니다. 당신이 생각한 유일한 옵션입니다. @David는 좋은 예를 보여줍니다;) – VDP

+0

@VDP : ??? "여기에 어딘가에서 실제로 무슨 일이 일어날 지 전혀 모르겠다"(- : – hippietrail

+0

@David : 테스트 할 수 있었던 모든 것을 받아 들일 수는 있지만 많은 것들을 받아 들일 수있는 위치에 없었습니다. 아직은 압력 때문에 받아들이기를 싫어합니다. – hippietrail

답변

5

나는 할 것이다 :

newFoo.apply($, ['foo','bar'].concat(ary)); 

당신이 인수의 기존 배열을 수정하지 않습니다 그 방법을. MDN에서 :

CONCAT가 호출되는이 객체의 원소로 이루어진 새로운 배열을 생성하고, 각 인자에 대해, 순서대로 다음의 인수는 그 인수 (의 요소이면 배열) 또는 인수 자체 (인수가 배열이 아닌 경우).

+0

내 예제에서 'newFoo.apply ($, [options] .concat (ary))'가 될 것 같네요? – hippietrail

+0

@hippietrail'options'가 array, 그냥'options.concat (ary)'가 필요합니다.'options'를 수정하고 싶지 않으면'options.slice(). concat (ary)'를 시도하십시오 – David

+0

아, 죄송합니다.'options'는 객체입니다. , 나는 나의 모범이 드러내지 않았다는 것을 깨닫지 못했다. 그거. – hippietrail

관련 문제