模块模式中的JavaScript命名空间

时间:2013-05-13 13:44:14

标签: javascript jquery namespaces module-pattern

我正在阅读有关创建namespace和模块化模式的How Good C# Habits can Encourage Bad JavaScript Habits文章,但我不明白使用$jQuery创建命名空间的原因。看看这段代码:

(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调用它?

1 个答案:

答案 0 :(得分:3)

当你加载jQuery库时,它会将两个全局符号绑定到对main函数的引用:“jQuery”和“$”。其他一些库也想使用“$”,所以jQuery提供了一种取消绑定“$”的方法,并将其恢复到加载jQuery之前的状态。通过在您的示例中使用该技术,您可以在代码中使用“$”,无论全局“$”是否指向jQuery。

编辑 - 您引用的那篇文章同样解释了它:

  

传递的第二个参数是jQuery。这样做的好处是命名参数被引用为$,这允许我们在匿名函数中将jQuery称为$,而不必担心它会与其他JavaScript库中声明的$冲突。这是一种常见的做法,在查看编写良好的jQuery代码时,您很可能会遇到这种情况。