2013-05-13 33 views
3

我在閱讀How Good C# Habits can Encourage Bad JavaScript Habits有關創建namespace和模塊化模式的文章,但我不明白使用$jQuery創建命名空間的原因。看看這個代碼:模塊模式中的JavaScript命名空間

(function(skillet, $, undefined) { 
    //Private Property 
    var isHot = true; 

    //Public Property 
    skillet.ingredient = "Bacon Strips"; 

    //Public Method 
    skillet.fry = function() { 
     var oliveOil; 

     addItem("\t\n Butter \n\t"); 
     addItem(oliveOil); 
     console.log("Frying " + skillet.ingredient); 
    }; 

    //Private Method 
    function addItem(item) { 
     if (item !== undefined) { 
      console.log("Adding " + $.trim(item)); 
     } 
    }  
}(window.skillet = window.skillet || {}, jQuery)); 

爲什麼發送$作爲參數,然後用jQuery調用呢?

+0

我很確定這是重複的,但我不認爲這個問題是最清楚的。 – Pointy 2013-05-13 13:48:34

回答

3

加載jQuery庫時,它會將兩個全局符號綁定到對主函數的引用:「jQuery」和「$」。但是,其他一些庫也希望使用「$」,所以jQuery提供了一種解除「$」綁定的方式,並將其恢復到加載jQuery之前的任何方式。通過在你的例子中使用這個技術,你可以在代碼中使用「$」,不管全局「$」是否指向jQuery。

編輯 —是非常文章引用你解釋它類似:

傳遞的第二個參數[是] jQuery的。這樣做的好處是命名參數被引用爲$,這允許我們在匿名函數中將jQuery引用爲$,而不必擔心它會與其他JavaScript庫中聲明的$相沖突。在查看寫得很好的jQuery代碼時,您很可能會遇到這種常見做法。

+0

對不起,但如果我根本不想使用jQuery,我還需要它嗎? – 2013-05-13 13:51:47

+0

用這種方法它會保證,如果我在名字空間內使用'$',我會調用jQuery。如果我不想在我的模塊中使用jQuery,我可以簡單地將參數和'jQuery'一起刪除嗎?這是對的嗎? – 2013-05-13 14:07:01

+0

如果你不想使用jQuery,那麼這個例子是不相關的。如果你確實使用它,那麼是的,用這個技巧「$」保證是對全局jQuery的引用。如果你不想使用它,就省略第二個參數。 – Pointy 2013-05-13 14:09:45