2013-02-26 44 views
-1

我有我的這種結構工程幾個js文件:如何調用方法

(function (window, $) { 
    var reload = function (force) { /* implementation here */ }; 
    //more variables are here, the same construction as above 
})(this, $); 

更多此類文件,對每個部分(頁)的網站有一個JS用這種結構來管理頁。整個網站是一個單獨的頁面,這些js文件通過隱藏,顯示和填充內容來管理DOM節點,這給用戶帶來了他/她瀏覽多個頁面的錯覺。

  1. 我想獲得有關上述結構是如何加載一個簡單的解釋 - 我看到加載所有這些JS腳本head.js庫,但我不明白的地方被加載,如何訪問它。

  2. 我想知道如何通過我自己訪問我需要的特定reload()。正如我告訴你的,更多的js文件具有相同的結構(resources.js,users.js,reports.js等)。我如何訪問裏面的重載功能,比方說,reports.js按鈕在html上按下我加載所有這些腳本?

+0

您在上面顯示的JS功能是自執行加載JS文件時一次。如果沒有更多信息,很難幫助您。 – sdespont 2013-02-26 14:57:51

+1

這是一個非常開放的問題,與應用程序中的JavaScript架構相關。我會建議閱讀關於JavaScript模塊和命名空間。搜索「模塊模式」。請參閱http://www.klauskomenda.com/code/javascript-programming-patterns/#module中的「揭示模塊模式」。 – DanC 2013-02-26 14:59:55

回答

1

這是一個自我調用的函數,爲避免重複使用變量標識符和破壞第三方代碼,這是一種很好的做法。

另一點是自調函數內聲明的變量在函數體的範圍內或全局範圍內都可用。這也很好,因爲在腳本中創建的「垃圾」可以在函數結束時收集(好吧,並非總是在clousure中使用它們)。另外,既然你在函數範圍中聲明瞭這樣的變量,其他庫在他們自己的「自調用函數作用域」中執行的東西將會使用像你這樣的變量和函數標識符,但這不會造成任何問題,因爲兩者都是不同的範圍!

function (window, $) 

在上面簽字的情況下,自調用的函數有兩個輸入參數:

  • 窗口將持有的JavaScript的瀏覽器窗口對象。
  • $將保存一個快捷方式對象或函數(通常是jQuery)。

聲明這樣的輸入參數,你避免了很多問題,因爲人們可以重用window標識和存儲其他的對象,但你的自我調用函數範圍內,window無論如何都會保持Window對象監守這是一個不同的參考。

如何訪問裏面的重載功能,比方說,在html上按下按鈕的reports.js我加載了所有這些腳本?

你正在聲明一個存儲整個reload()函數的局部變量。爲了能在任何範圍內訪問它,你需要聲明它在全球範圍內

var reload = null; 

(function (window, $) { 
    // Setting the variable living in the global scope! 
    reload = function (force) { /* implementation here */ }; 

    //more variables are here, the same construction as above 

})(this, $); 
1

考慮到這段代碼,對#2的回答是:您無法從外部訪問reload。它被聲明爲「立即調用的函數表達式」的局部變量,該函數一旦被定義就會被調用(它回答#1,我希望)。

通常,這是用來創建模塊,將公開一些方法和屬性。例如,如果代碼是:

var obj = (function (window, $) { 

    var reload = function (force) { /* implementation here */ }; 

    return { 
     reload : reload 
    }; 

})(this, $); 

然後,你可以調用realod

obj.reload(); 
1

,除非你修改這些.js文件無法訪問這些變量。

(function (window, $) { 

    var reload = function (force) { /* implementation here */ }; 

    //more variables are here, the same construction as above 

    window.reload = reload; 

})(this, $); 

上面的代碼使變量/方法reload可以從代碼之外獲得。