2010-11-20 83 views
3

這可能是一個非常複雜的答案,或者我剛剛錯過的非常簡單的一個簡單問題,但是在Prototype和jQuery等庫中,$全局變量如何成爲包含功能,例如:

$.ajax.get(…); 

,也是一個函數本身,如:

$("…"); 

任何幫助,甚至一個指向更說明網站將是輝煌的,我只是好奇!

例如,如果我創建了一個函數($),包含一個子對象(ajax),如:

var $ = function() { 
    this.ajax = {}; 
    return this; 
}; 

我可以訪問ajax對象像$().ajax,但不喜歡$.ajax,你怎麼了讓他們兩個?

+2

功能是JavaScript中的一等公民。他們可以擁有自己的屬性,功能和原型。 – Alex 2010-11-20 01:12:14

回答

7

在JavaScript中,函數是對象,對象可能有屬性,所以它只是該語言的另一個精彩部分!

var f = function(x) { return x; }; 
f.attr = "a"; 
f.attr; // => "a" 
f(123); // => 123 
+0

謝謝@maerics,我知道所有的函數都是對象,但是,例如,你會如何編碼這樣的東西?我會用一個例子更新我的問題。 – 2010-11-20 01:14:05

+1

@Jonathon:在這個後續的預期中,我已經添加了一個例子=) – maerics 2010-11-20 01:15:36

+0

你是一個明星,非常棒!我可以在1分鐘內接受。並計數! – 2010-11-20 01:20:43

3

所有的javascript函數都是javascript對象。

var obj = {}; 
var func = new function(){}; 

obj.property = ""; 
func.property = ""; 

你可以瞭解所有關於它在這裏:http://ejohn.org/apps/learn/#16

0
var $ = (function() { 

    var keys = { a: 1, b: 2, c: "Bob" }, 
     external_func = function (key, val) { 
      if (val === undefined) { return keys[key]; } 
      keys[key] = val; 
      extend(external_func, { key : val }); 
     }; 

    function extend (obj, keys) { 
     var key; 
     for (key in keys) { 
      if (keys.hasOwnProperty(key)) { 
       obj[key] = keys[key]; 
      } 
     } 
    } 

    extend(external_func, keys); 
    external_func.setKey = function (key, val) { keys[key] = val; this[key] = val; }; 
    return external_func; 
}()); 

jQuery的不僅僅是這個大很多,但是這可能是你如何能建立一個保存鍵和值的系統爲例,你可以讀取函數調用或屬性。

例如,如果按鍵舉行的URL的所有查詢的崩潰,或持有該頁面的所有cookie,你可以這樣做:

曲奇(「登錄」); Cookie [「登錄」]; Cookie.username;

查詢(「page_name」); 查詢[「page_name」]; Query.page_name;

除非您使用函數,使用函數附帶的setCookie方法,或者僅針對支持本機getter和setters的瀏覽器,否則只需確保將其視爲只讀。

相關問題