2013-05-13 58 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