欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

了解Javascript的模塊化開發(fā)

 更新時間:2015年03月02日 10:18:50   投稿:junjie  
這篇文章主要介紹了了解Javascript的模塊化開發(fā),本文講解了為什么需要模塊化開發(fā),模塊化開發(fā)的形成原因等內容,需要的朋友可以參考下

小A是某個創(chuàng)業(yè)團隊的前端工程師,負責編寫項目的Javascript程序。

全局變量沖突

根據自己的經驗,小A先把一些常用的功能抽出來,寫成函數放到一個公用文件base.js中:

復制代碼 代碼如下:

var _ = {
    $: function(id) { return document.getElementById(id); },
    getCookie: function(key) { ... },
    setCookie: function(key, value) { ... }
};

小A把這些函數都放在_對象內,以防過多的全局變量造成沖突。他告訴團隊的其他成員,如果誰想使用這些函數,只要引入base.js就可以了。

小C是小A的同事,他向小A反映:自己的頁面引入了一個叫做underscore.js的類庫,而且,這個類庫也會占用_這個全局變量,這樣一來就會跟base.js中的_沖突了。小A心想,underscore.js是第三方類庫,估計不好改,但是base.js已經在很多頁面鋪開,不可能改。最后小A只好無奈地把underscore.js占用的全局變量改了。

此時,小A發(fā)現,把函數都放在一個名字空間內,可以減少全局變量沖突的概率,卻沒有解決全局變量沖突這個問題。

依賴

隨著業(yè)務的發(fā)展,小A又編寫了一系列的函數庫和UI組件,比方說標簽切換組件tabs.js,此組件需調用base.js以及util.js中的函數。

有一天,新同事小D跟小A反映,自己已經在頁面中引用了tabs.js,功能卻不正常。小A一看就發(fā)現問題了,原來小D不知道tabs.js依賴于base.js以及util.js,他并沒有添加這兩個文件的引用。于是,他馬上進行修改:

復制代碼 代碼如下:

<script src="tabs.js"></script>
<script src="base.js"></script>
<script src="util.js"></script>

然而,功能還是不正常,此時小A教訓小D說:“都說是依賴,那被依賴方肯定要放在依賴方之前啊”。原來小D把base.js和util.js放到tabs.js之后了。

小A心想,他是作者,自然知道組件的依賴情況,但是別人就難說了,特別是新人。

過了一段時間,小A給標簽切換組件增加了功能,為了實現這個功能,tabs.js還需要調用ui.js中的函數。這時,小A發(fā)現了一個嚴重的問題,他需要在所有調用了tabs.js的頁面上增加ui.js的引用!?。?/p>

又過了一段時間,小A優(yōu)化了tabs.js,這個組件已經不再依賴于util.js,所以他在所有用到tabs.js的頁面中移除了util.js的引用,以提高性能。他這一修改,出大事了,測試組MM告訴他,有些頁面不正常了。小A一看,恍然大悟,原來某些頁面的其他功能用到了util.js中的函數,他把這個文件的引用去掉導致出錯了。為了保證功能正常,他又把代碼恢復了。

小A又想,有沒有辦法在修改依賴的同時不用逐一修改頁面,也不影響其他功能呢?

模塊化

小A逛互聯網的時候,無意中發(fā)現了一種新奇的模塊化編碼方式,可以把它之前遇到的問題全部解決。

在模塊化編程方式下,每個文件都是一個模塊。每個模塊都由一個名為define的函數創(chuàng)建。例如,把base.js改造成一個模塊后,代碼會變成這樣:

復制代碼 代碼如下:

define(function(require, exports, module) {
    exports.$ = function(id) { return document.getElementById(id); };
    exports.getCookie = function(key) { ... };
    exports.setCookie = function(key, value) { ... };
});

base.js向外提供的接口都被添加到exports這個對象。而exports是一個局部變量,整個模塊的代碼都沒有占用半個全局變量。

那如何調用某個模塊提供的接口呢?以tabs.js為例,它要依賴于base.js和util.js:

復制代碼 代碼如下:

define(function(require, exports, module) {
    var _ = require('base.js'), util = require('util.js');
    var div_tabs = _.$('tabs');
    // .... 其他代碼
});

一個模塊可以通過局部函數require獲取其他模塊的接口。此時,變量_和util都是局部變量,并且,變量名完全是受開發(fā)者控制的,如果你不喜歡_,那也可以用base:
復制代碼 代碼如下:

define(function(require, exports, module) {
    var base = require('base.js'), util = require('util.js');
    var div_tabs = base.$('tabs');
    // .... 其他代碼
});

一旦要移除util.js、添加ui.js,那只要修改tabs.js就可以了:
復制代碼 代碼如下:

define(function(require, exports, module) {
    var base = require('base.js'), ui = require('ui.js');
    var div_tabs = base.$('tabs');
    // .... 其他代碼
});

加載器

由于缺乏瀏覽器的原生支持,如果我們要用模塊化的方式編碼,就必須借助于一個叫做加載器(loader)的東西。

目前加載器的實現有很多,比如require.js、seajs。而JRaiser類庫也有自己的加載器。

相關文章

  • 幾行js代碼實現自適應

    幾行js代碼實現自適應

    本文主要介紹了使用js獲取隱藏元素寬高的解決方案以及代碼思路,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 使用gulp搭建本地服務器并實現模擬ajax

    使用gulp搭建本地服務器并實現模擬ajax

    這篇文章主要給大家介紹了如何使用gulp搭建本地服務器并實現模擬ajax的相關資料,文中介紹的非常詳細,相信對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • javascript事件捕獲機制【深入分析IE和DOM中的事件模型】

    javascript事件捕獲機制【深入分析IE和DOM中的事件模型】

    這篇文章主要介紹了javascript事件捕獲機制,結合實例形式分析了冒泡的原理、事件捕獲、各瀏覽器事件處理機制與IE和DOM中的事件模型等,需要的朋友可以參考下
    2016-12-12
  • js實現鼠標拖拽div左右滑動

    js實現鼠標拖拽div左右滑動

    這篇文章主要為大家詳細介紹了js實現鼠標拖拽div左右滑動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • javascript中的相等操作符(==與===區(qū)別)

    javascript中的相等操作符(==與===區(qū)別)

    這篇文章主要介紹了javascript中的相等操作符(==與===區(qū)別),需要的朋友可以參考下
    2019-12-12
  • 再談javascript原型繼承

    再談javascript原型繼承

    Javascript原型繼承是一個被說爛掉了的話題,但是自己對于這個問題一直沒有徹底理解,今天花了點時間又看了一遍《Javascript模式》中關于原型實現繼承的幾種方法,下面來一一說明下,在最后我根據自己的理解提出了一個關于繼承比較完整的實現。
    2014-11-11
  • 基于JavaScript簡單實現一下新手引導效果

    基于JavaScript簡單實現一下新手引導效果

    這篇文章主要為大家詳細介紹了如何基于JavaScript簡單實現一下新手引導效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • js實現圖片上傳并正常顯示

    js實現圖片上傳并正常顯示

    這篇文章主要介紹了js實現圖片上傳并正常顯示,我們經常遇到上傳照片的情況,如何實現圖片上傳,本文為大家進行揭曉,感興趣的小伙伴們可以參考一下
    2015-12-12
  • JS實現深拷貝的4種方式介紹

    JS實現深拷貝的4種方式介紹

    這篇文章主要給大家介紹了關于JS實現深拷貝的4種方式,深拷貝是指將一個對象完整地拷貝一份,不受原對象影響,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 微信提示 在瀏覽器打開 效果實現過程解析

    微信提示 在瀏覽器打開 效果實現過程解析

    這篇文章主要介紹了微信提示 在瀏覽器打開 效果實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論