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

JS模塊與命名空間的介紹

 更新時間:2013年03月22日 09:46:45   作者:  
JS模塊與命名空間的介紹,需要的朋友可以參考一下

起因
將代碼組織到類中的一個重要原因是讓代碼更加“模塊化”,可以在很多不同的場景中實現(xiàn)代碼的重用。但類不是唯一的模塊化代碼的方式。

一般來講,模塊是一個獨立的JS文件。模塊文件可以包含一個類定義、一組相關(guān)類、一個實用函數(shù)庫或者一些待執(zhí)行的代碼。

模塊化的目標是支持大規(guī)模的程序開發(fā),處理分散源中代碼的組裝,并且能讓代碼正確運行,哪怕包含了不需要的模塊代碼,也可以正確執(zhí)行代碼。

理想狀態(tài)下,所有模塊都不應(yīng)當定義超過一個全局標識。

模塊函數(shù)
通過把模塊定義在某個函數(shù)的內(nèi)部來實現(xiàn),定義的變量和函數(shù)都屬于該函數(shù)的局部變量,在函數(shù)外不可見。實際上,可以將這個函數(shù)作用域用做模塊的命名空間(模塊函數(shù))

一旦將模塊代碼封裝進一個函數(shù)中,就需要一些方法導(dǎo)出公用API,以便在模塊函數(shù)外部調(diào)用它們。下面有幾種方式導(dǎo)出公用API:

首先創(chuàng)建一個命名空間

復(fù)制代碼 代碼如下:

// 創(chuàng)建一個全局變量用來存放與學(xué)校相關(guān)的模塊
var school;                // 創(chuàng)建school命名空間
if(!school) school = {};

1. 利用構(gòu)造函數(shù)

復(fù)制代碼 代碼如下:

// 返回Student構(gòu)造函數(shù)來導(dǎo)出公共API
school.Student = (function() {
    function Student() {

    }
    // ...... 定義Student的原型對象和私有屬性和方法 ........
    return Student;        // 返回Student構(gòu)造方法導(dǎo)出公共API
})();

2. 返回命名空間對象

如果模塊API包括多個單元,則它可以返回命名空間對象

復(fù)制代碼 代碼如下:

// 為school添加students模塊
school.students = (function() {
    // 這里定義了很多類如課程類/成績類, 使用局部變量和函數(shù)
    function Subject() { /* ... */ }
    function Grade() { /* ... */ }

    // 通過返回命名空間對象將API導(dǎo)出
    return {
        Subject: Subject,
        Grade: Grade
    };
})();

3. 通過關(guān)鍵字new調(diào)用

另外一種類似類似技術(shù):把模塊函數(shù)當做構(gòu)造函數(shù),通過new來調(diào)用。把它們(公共API)賦值給this屬性來將其導(dǎo)出

復(fù)制代碼 代碼如下:

school.students = (new function() {
    // ..... 這里省略了代碼 ......

    // 將API導(dǎo)到this對象中
    this.Subject = Subject;
    this.Grade = Grade;

    // 注意,這里沒有返回值
}());    // 括號寫在里面。這里是創(chuàng)建新實例,new后面應(yīng)緊跟構(gòu)造函數(shù)的調(diào)用而不是表達式

4. 已定義命名空間對象

作為一種替代方案,如果已經(jīng)定義了全局命名空間對象,通過模塊函數(shù)可以直接設(shè)置那個對象的屬性。

復(fù)制代碼 代碼如下:

// 如果已經(jīng)定義了命名空間對象
var school;                // 創(chuàng)建school命名空間
if(!school) school = {};
school.students = {};    // student命名空間已經(jīng)定義
(function(students) {
    // ..... 這里省略了代碼 ......

    // 將公共API導(dǎo)到上面定義的命名空間中
    students.Subject = Subject;
    students.Grade = Grade;
    // 這里也不需要返回值
})(school.students);

為此,導(dǎo)出公共API的方式已經(jīng)講完。

相關(guān)文章

  • JS提交并解析后臺返回的XML的代碼

    JS提交并解析后臺返回的XML的代碼

    ajax提交并返回xml的實現(xiàn)代碼
    2008-11-11
  • 分享網(wǎng)頁檢測搖一搖實例代碼

    分享網(wǎng)頁檢測搖一搖實例代碼

    這篇文章主要介紹了分享網(wǎng)頁檢測搖一搖實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 今天,小程序正式支持 SVG

    今天,小程序正式支持 SVG

    這篇文章主要介紹了小程序支持SVG,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • js實現(xiàn)登錄注冊框手機號和驗證碼校驗(前端部分)

    js實現(xiàn)登錄注冊框手機號和驗證碼校驗(前端部分)

    這篇文章主要為大家詳細介紹了js實現(xiàn)登錄注冊框手機號和驗證碼校驗的前端部分代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • JavaScript事件發(fā)布/訂閱模式原理與用法分析

    JavaScript事件發(fā)布/訂閱模式原理與用法分析

    這篇文章主要介紹了JavaScript事件發(fā)布/訂閱模式,結(jié)合實例形式簡單分析了javascript發(fā)布/訂閱模式的概念、原理及簡單使用方法,需要的朋友可以參考下
    2018-08-08
  • 基于JS實現(xiàn)無縫滾動思路及代碼分享

    基于JS實現(xiàn)無縫滾動思路及代碼分享

    無縫滾動效果在各大網(wǎng)站都有這樣的需求,應(yīng)用非常廣泛,下面小編給大家分享基于JS實現(xiàn)無縫滾動思路及代碼,非常不錯具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-06-06
  • JS獲取本機IP地址的2種方法

    JS獲取本機IP地址的2種方法

    我們在項目經(jīng)常遇到獲取本機IP地址的需求,下面這篇文章主要給大家介紹了關(guān)于JS獲取本機IP地址的2種方法,文中通過示例代碼介紹的非常詳細,本文適合新手,需要的朋友可以參考下
    2022-09-09
  • js處理php輸出時間戳對不上號的解決方法

    js處理php輸出時間戳對不上號的解決方法

    JS時間戳為13位,包含3位毫秒的,而PHP只有10位不包含毫秒的,這就是為什么對不上號原因,處理方法如下
    2014-06-06
  • 九個超級好用的Javascript技巧

    九個超級好用的Javascript技巧

    在實際的開發(fā)工作過程中,積累了一些常見又超級好用的 Javascript 技巧和代碼片段,包括整理的其他大神的 JS 使用技巧,今天篩選了 9 個,以供大家參考
    2023-04-04
  • zTree插件下拉樹使用入門教程

    zTree插件下拉樹使用入門教程

    這篇文章主要為大家詳細介紹了zTree插件下拉樹使用入門教程,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論