2012-12-20 3 views
2

특정 인수를 재정렬하거나 생략 할 수있는 jQuery 메서드가 있습니다. 예를 들면 :정렬되지 않은/선택적 인수를 사용하는 jQuery 메서드

$('#box').animate({top: 100}, 2000, "linear", function(){alert("done");}); 

작품 정확히 동일 :

$('#box').animate({top: 100}, 2000, function(){alert("done");}); 

어떻게 jQuery를이 하나의 인자에 연관 배열을 거치지 않고 이러한 유연성을 허용하는 자신의 방법을 구성 하는가?

각 인수의 데이터 유형을 검사하고 결과에 따라 할당 할 수 있습니까? 이것이 각 방법에 상당한 오버 헤드를 추가합니까?

답변

0

정수 또는 개체 값

그것은

// Allocate passed arguments to settings based on type 
for(var i = 0; i <= arguments.length; i++) { 
    var arg = arguments[i]; 
    switch (typeof arg) { 
     case "function": 
      settings.action = arg; 
      break; 
     case "boolean": 
      settings.runOnLoad = arg; 
      break; 
     case "number": 
      settings.duration = arg; 
      break; 
    } 
} 
0

jQuery.animate() function on github에서 두 번째, 세 번째 및 네 번째 매개 변수를 사용하여 jQuery.speed()를 호출하고 있습니다. 속도 기능은 조금 더 아래쪽으로 정의되고 매개 변수로 몇 가지 유형을 확인합니다. effects.js에서

코드 :

jQuery.speed = function(speed, easing, fn) { 
    var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { 
     complete: fn || !fn && easing || 
      jQuery.isFunction(speed) && speed, 
     duration: speed, 
     easing: fn && easing || easing && !jQuery.isFunction(easing) && easing 
    }; 
    ... 
}; 
+1

흠 ...이. 나는 그 그 일을 할 수있을 것 같아요.. 실행하기 전에 ...하지만 내가 할 수있는 읽음 그것! :) DANG – McShaman

0

짧은 답변 : 예, 그들은 일반적으로 테스트 등 $.isFunction, $.isObject$.isArray, 만약 그들이 어떤 유형에 따라 인수를 주위로 이동합니다. 이것은 실제로 당신이 predefined list of prototypes 일 경우에만 작동합니다. (애니메이션의 경우 두 번째 인수가 객체 (옵션) 또는 숫자 값 (시간)이 될 수 있습니다.

0

물론 jQuery를이 if, elseswitch 문을 사용하여, 모든 인수를 먼저 확인해야 기능, 부울, 문자열입니다 '나는 스위치를 사용하여 내 자신의 솔루션을 모방 한

관련 문제