2012-08-29 72 views
0

我正在研究一個有大量javascript的web項目,並且因爲我們將所有內容都添加到「$。」中,所以我們開始觸擊命名空間衝突。IIFE jquery準備

我讀了關於命名空間,發現偉大的文章在http://addyosmani.com/blog/essential-js-namespacing/

我試圖建立一個IIFE內部的命名空間的建議,我想我是幸運,因爲該功能已經設置爲

(function() { ... }); 

所以我把它轉換爲:

(function(namespace, undefined) { ... })(window.stuff = window.stuff || {}); 

才發現(工作時間)之後,實際上原來是

$(function() { ... } 

這意味着它被全部在jQuery的ready()函數中調用。

我想保留命名空間IIFE,但無法弄清我將如何在jQuery的ready()函數中使用它。這是可能的,如果是這樣的話?

回答

0
var namespace = (function() { 
    // local variables and functions 

    function readyHandler($) { 
     // DOM ready code 
     $("selector").method(); 
    } 

    // exposed methods 
    return { 
     readyHandler: readyHandler 
    }; 
})(); 

jQuery(namespace.readyHandler); 
+0

後,現有的代碼,我能夠bascially做這個答案暗示的一些細緻的劃分:創建命名空間和暴露API方法從jQuery的ready()函數調用。 – user1601333

0

嗯,如果不知道你得到了概念直...這些功能都看起來像一個立即調用函數表達式,因爲你不調用該函數。

(function() { ... }()); 
        --^-- invoke function 

jQuery的ready已經創建了一個新的閉包,所以你並不需要一個IIFE反正。

在任何情況下,當使用jQuery時,您可以使用對象的命名空間將您的插件命名在$命名空間中,這樣您就不會污染它。

$.myplugin = { 
    ... 
} 
+0

謝謝,我的意思是你寫了什麼,但錯過了結尾()。我修改了我的問題。 另外,我不是創建一個jquery插件,而是我自己的代碼應該分開命名空間。問題在於,我繼承的代碼只是將所有內容都添加到了jQuery($)命名空間中,即使它本身已經存在了。 – user1601333