JS模組與命名空間的介紹_javascript技巧
起因
將程式碼組織到類別中的一個重要原因是讓程式碼更加“模組化”,可以在許多不同的場景中實現程式碼的重用。但類別不是唯一的模組化程式碼的方式。
一般來講,模組是一個獨立的JS檔。模組檔案可以包含一個類別定義、一組相關類別、一個實用函數庫或一些待執行的程式碼。
模組化的目標是支援大規模的程式開發,處理分散源中程式碼的組裝,並且能讓程式碼正確運行,即使包含了不需要的模組程式碼,也可以正確執行程式碼。
理想狀態下,所有模組都不應定義超過一個全域標識。
模組函數
透過把模組定義在某個函數的內部來實現,定義的變數和函數都屬於函數的局部變量,在函數外不可見。實際上,可以將這個函數作用域用做模組的命名空間(模組函數)
一旦將模組程式碼封裝進一個函數中,就需要一些方法匯出公用API,以便在模組函數外部呼叫它們。以下有幾種方式匯出公用API:
先建立一個命名空間
// 建立一個學校變數用來存放與全域變數相關的模組
var school; // 建立school命名空間
if(!school) school = {};
1. 利用建構子
程式碼如下:
// 回傳>school.Student = (function() {
function Student() {
}
// ......定義Student的原型物件和私有屬性和方法.... ....
return Student; // 回傳Student建構方法導出公用API
2. 回傳命名空間物件
如果模組API包含多個單元,則它可以傳回命名空間物件
// 為school加上studentssool // 這裡定義了許多類別如課程類別/成績類別, 使用局部變數與函數
function Subject() { /* ... */ }
function Subject() { /* ... */ }
function Subject() { /* ... */ }
function Grade () { /* ... */ }
// 透過傳回命名空間物件將API匯出
return {
})();
3. 透過關鍵字new呼叫
另外一種類似類似技術:把模組函數當作建構函數,透過new來呼叫。把它們(公共API)賦值給this屬性將其匯出
程式碼如下:
school.students = (new function() { // ..... 這裡省略了程式碼...
// 將API導到this物件中
this.Subject = Subject;
this.this.Subject = Subject;
this.de = GradeGrade = GradeGrade = Grade0 ;
// 注意,這裡沒有回傳值
}()); // 括號內寫。這裡是建立新實例,new後面應緊跟著建構子的呼叫而不是表達式
4. 已定義命名空間物件
作為一種替代方案,如果已經定義了全域命名空間對象,透過模組函數可以直接設定那個對象的屬性。
程式碼如下:
// 如果定義了命名空間物件
var school; // 建立school命名空間
if(!school) school = {p. // student命名空間已經定義
(function(students) {
// ..... 這裡省略了代碼......
// 將公共API導到上面在定義的命名空間中
students.Subject = Subject;
students.Grade = Grade;
// 這裡也不需要回傳值
})(school.students); >
為此,匯出公開API的方式已經講完。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

解決PHP報錯:未找到指定的命名空間類別在使用PHP進行開發時,我們經常會遇到各種各樣的報錯資訊。其中一個常見的報錯就是「未找到指定的命名空間類別」。這個錯誤通常是由於引入的類別檔案沒有被正確地命名空間引用所引起的。本文將介紹如何解決這個問題,並提供一些程式碼範例。首先,讓我們來看看一個常見的報錯訊息範例:Fatalerror:UncaughtError:C

Redis是一個開源的高效能的鍵值儲存資料庫。在使用Redis進行資料儲存的時候,我們需要考慮到鍵的命名空間與過期機制的設計,來維護Redis的效能和資料完整性。本文將介紹Redis的命名空間和過期機制的設計想法和實作方式。一、Redis的命名空間設計思路在Redis中,鍵是可以任意設定的。為了方便管理和區分不同的資料類型,Redis引入了命名空間的概念。命

F3框架是一款簡單易用,靈活可擴充的PHPWeb框架,它的命名空間(Namespace)機制為我們提供了一個更規範、可讀性更強、程式碼結構更為清晰的程式設計方式。在這篇文章中,我們將探討如何在F3框架中使用命名空間。一、什麼是命名空間命名空間常被用來解決在PHP中命名衝突的問題,它可以將一個或多個類別、函數或常數封裝在一個命名空間中,相當於為它們加上一個前綴。例

C++是一種廣泛使用的高階程式語言,它具有很高的靈活性和可擴展性,但同時也需要開發者嚴格掌握其語法規則才能避免錯誤。其中,常見的錯誤之一就是「使用了未定義的命名空間」。本文將介紹該錯誤的含義、出現原因和解決方法。一、什麼是使用了未定義的命名空間?在C++中,命名空間是一種組織可重複使用程式碼的方式,以便保持程式碼的模組性和可讀性。使用命名空間的方式可以使同名的函數

PHP8新功能範例:如何利用命名空間和程式碼來更好地組織程式碼結構?引言:PHP8是PHP程式語言的重要版本,它引入了許多令人興奮的新特性和改進。其中一個最重要的新功能是命名空間(namespace)。命名空間是一種將程式碼組織成更好結構的方法,它能夠避免相同名稱的類別、函數和常數之間的衝突。在本文中,我們將介紹如何利用命名空間和程式碼來更好地組織PHP8程式碼的結構

使用命名空間管理自訂函數至關重要,它允許開發者建立自己的命名範圍,防止名稱衝突。步驟包括:建立命名空間(namespace)、使用use語句匯入命名空間、呼叫命名空間函數。在實戰案例中,MyMath擴充示範如何使用命名空間組織數學函數,提高可讀性和可維護性。

如何利用PHP7的命名空間和自動載入機制組織程式碼的結構?摘要:隨著PHP7的推出,命名空間與自動載入機製成為了PHP開發中不可忽視的重要特性。本文將介紹如何利用PHP7的命名空間和自動載入機制來組織程式碼的結構,並透過具體的程式碼範例進行說明。一、什麼是命名空間?命名空間是PHP7引入的一種機制,用於解決不同類別庫或程式碼檔案之間可能出現的命名衝突問題。透過命名空間

PHP5.3新功能:如何使用命名空間解決類別名稱衝突問題引言:在PHP的開發過程中,隨著專案變得越來越龐大和複雜,類別名稱衝突問題也隨之而來。為了解決這個問題,PHP5.3版本引入了命名空間的概念。命名空間提供了一種將相關的類別、函數和常數組織在一起的方式,以避免命名衝突的問題。本文將詳細介紹PHP命名空間的概念和如何使用命名空間解決類別名稱衝突問題,並附帶程式碼範例
