2015-11-25 36 views
0

我目前正在開發一個項目,並且已經看到下面的代碼用於在窗口對象中存儲每個「模塊」(如此)。多年來,我已經做了大量的Javascript,並且從我對最佳實踐的理解中,您想避免污染全局名稱空間。這會被認爲是污染全球命名空間嗎?最佳實踐:全局對象vs模塊

(function (global) { 
    "use strict"; 

    // Public methods. 
    var exports = {}; 

    /* 
    * Some other configuration/members 
    * 
    */ 

    global.Helper = exports.members; 
    return exports; 

}(window)); 

我習慣於使用模塊模式來構建我的Javascript。

下面的示例。

var module = (function() { 

    var defaultOptions = { 
     //some options 
    }; 

    var init = function (options) { 
     defaultOptions = $.extend(defaultOptions, options, false); 

    }; 

    /* 
    * More code 
    * 
    */ 

    //public functions 
    return { 
     init: init 
    } 


})(); 

從最佳做法的立場來看,我對我的理解還是完全錯過了船?

是否可以接受的做法是將每個模塊存儲在窗口對象中?

+2

「從而避免存儲在一個全局命名空間中的任何」 ---但'變種module'是一個全球性的空間中定義。 – zerkms

+0

公平的評論,重寫了這篇文章 – Mikechats

+0

你必須在全局命名空間中放置** **,否則應用程序將無法使用它。但是,您可以通過爲整個名稱空間使用一個名稱,並使用每個模塊的屬性來最小化污染。就像所有jQuery插件都是'$ .something'一樣。 – Barmar

回答

0

我認爲把模塊放在全局空間比較好,因爲每個使用你的模塊的人都會被迫只使用一個窗口變量。

另一個原因 - 窗口對象會一直定義嗎?

所有著名的JavaScript模塊都在全球範圍內定義:jQuery的,原型,警予等