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

ответ

3

Когда вы загружаете библиотеку jQuery, она связывает два глобальных символа с ссылкой на главную функцию: «jQuery» и «$». Однако некоторые другие библиотеки также хотят использовать «$», поэтому jQuery предоставляет способ развязать «$» и восстановить его до того, что было до загрузки jQuery. Используя этот метод в вашем примере, вы можете использовать «$» в коде, независимо от того, относится ли глобальный «$» к jQuery.

редактировать — что очень статье вы ссылки объясняет это так же:

Второй аргумент, передаваемый [это] JQuery. Преимущество этого в том, что именованный параметр ссылается на $, что позволяет нам ссылаться на jQuery как $ в анонимной функции, не беспокоясь о том, что он будет конфликтовать с $, объявленным в других библиотеках JavaScript. Это обычная практика, с которой вы, скорее всего, столкнетесь, глядя на хорошо написанный код jQuery.

+0

Извините за глупый вопрос, но если я вообще не хочу использовать jQuery, мне это все еще нужно? –

+0

с таким подходом будет гарантировано, что если я использую '' 'внутри моего пространства имен, я буду вызывать jQuery. И если я не хочу использовать jQuery в своем модуле, я могу просто удалить параметр и 'jQuery' вместе? Правильно ли это? –

+0

Если вы не хотите использовать jQuery, то пример не имеет значения. Если вы его используете, то да, с этим трюком «$» гарантированно будет ссылкой на глобальный jQuery. Если вы не хотите его использовать, просто оставьте второй параметр. – Pointy