2014-02-18 48 views
1

鑑於僅$.get第一個參數是必須的:jQuery/Javasscript如何處理此方法調用?

$.get(URL,data,function(data,status,xhr),dataType) 

如何的jQuery/Javascript地圖給定的參數,以正確的聲明在這兩個例子論證?

$.get("test.php", { name:"Donald", town:"Ducktown" }); 

$.get("test.php", function(data){ 
    alert("Data: " + data); 
}); 

http://www.w3schools.com/jquery/ajax_get.asp

在Python中,你將不得不通過名字,如果你跳過爲了調用參數。但jQuery如何處理它?

+0

因爲你可以檢查類型的參數? –

+0

請使用jQuery API而不是w3schools! – epascarello

回答

2

但jQuery如何處理它?

只要看一看the code

jQuery[ "get" ] = function(url, data, callback, type) { 
    // shift arguments if data argument was omitted 
    if (jQuery.isFunction(data)) { 
     type = type || callback; 
     callback = data; 
     data = undefined; 
    } 

    return jQuery.ajax({ 
     url: url, 
     type: "get", 
     dataType: type, 
     data: data, 
     success: callback 
    }); 
}; 
+0

這是有啓發性的。我在考慮簽名模式匹配和JS本身的重載方法,而jQuery作者已經決定明確地做到這一點,出於某種原因。 – aitchnyu

+0

@aitchnyu:JS中沒有簽名(正式參數列表的長度除外)。如果你想用類型做任何事情,你必須明確地做。 – Bergi

1

它驗證參數的輸入並相應地執行操作。

1

在JavaScript中,有兩件事情可以做到這一點:arguments類似數組的對象和typeof運算符。所有函數都有一個名爲arguments的類似數組的對象。您可以通過它訪問傳遞給該函數的所有參數,即使它們未在參數列表中命名。其次,您可以使用typeof運算符來確定參數的類型(object,function,string等)。因此,jQuery使用arguments數組檢測所有參數,然後確定哪些使用typeof

1

爲了擴大對@ BERGI的回答是:

isFunction()樣子:

isFunction: function(obj) { 
     return jQuery.type(obj) === "function"; 
    } 

和擴大,jQuery.type()樣子:

type: function(obj) { 
     if (obj == null) { 
      return String(obj); 
     } 
     return typeof obj === "object" || typeof obj === "function" ? 
      class2type[ core_toString.call(obj) ] || "object" : 
      typeof obj; 
    } 

您可以查看最近的jQuery源here