Js中的模組函式和命名空間的介紹

2021-08-19 17:14:20 字數 1867 閱讀 7374

命名空間namespace(某些語言中叫package),是乙個在靜態語言中常見的概念。它可以幫助我們更好地整理**,並可避免命名衝突。

遺憾的是,js中並不提供原生的命名空間支援。在js中建立的任何物件都預設是全域性物件。在現代的大規模js開發中,不採用命名空間會造成非常糟糕的命名方式,比如用字首命名函式和變數,導致**醜陋不可讀。當引入第三方庫後,更可能會發生命名覆蓋的情況。

簡單地說,我們可以建立乙個簡單物件字面量來打包所有的相關函式和變數。

模組函式:通過把模組定義在某個函式內部來實現,定義的變數和函式都屬於該函式的區域性變數,在函式外不可見。實際上,可以將這個函式作用域用作模組的命名空間

一旦將模組封裝進乙個函式中,就需要一些方法匯出公用api,以便在函式外部呼叫他們,下面有幾種方式匯出公用api

話不多說,我們一邊看例子一邊解釋嘍

1、利用建構函式

var school;//建立乙個全域性變數用來存放與學校相關的模組

if(!school);//建立school命名空間

}school.student = (function() 你的年齡:$`);

}return student;

})();

school.student('女',18);//你的性別:女 你的年齡:18

2. 返回命名空間物件

如果模組api包括多個單元,則它可以返回命名空間物件

var school;

if(!school);

}school.students = (function()`)

}function grade(cride)`)

}return

})();

school.students.subject('英語');//我最愛的學科是:英語

school.students.grade(8);//我最高的學分是:8

3. 通過關鍵字new呼叫

另外一種類似類似技術:把模組函式當做建構函式,通過new來呼叫。把它們(公共api)賦值給this屬性來將其匯出

var school;

if(!school);

} school.students = (new function()`)

}function grade(cride)`)

}this.subject = subject;

this.grade = grade;

}());

school.students.subject('英語');//我最愛的學科是:英語

school.students.grade(8);//我最高的學分是:8

4. 已定義命名空間物件

作為一種替代方案,如果已經定義了全域性命名空間物件,通過模組函式可以直接設定那個物件的屬性。

var school;

if(!school);

}school.students = {};

(function(students)`)

}function grade(cride)`)

}students.subject = subject;

students.grade = grade;

})(school.students);

school.students.subject('英語');//我最愛的學科是:英語

school.students.grade(8);//我最高的學分是:8

JS模組與命名空間的介紹

起因 將 組織到類中的乙個重要原因是讓 更加 模組化 可以在很多不同的場景中實現 的重用。但類不是唯一的模組化 的方式。一般來講,模組是乙個獨立的js檔案。模組檔案可以包含乙個類定義 一組相關類 乙個實用函式庫或者一些待執行的 模組化的目標是支援大規模的程式開發,處理分散源中 的組裝,並且能讓 正確...

python中random模組中的函式介紹

1 random.random 用於生成乙個0到1的隨機浮點數 2 random.uniform a,b 用於生成乙個指定範圍內的隨機浮點數,且不受a b位置影響。3 random.randint a,b 生成乙個指定範圍內的整數,必須滿足a b 4 random.randrange start s...

函式的引數和命名空間

1 函式無論傳入多少位置引數都可以正常執行 2 函式無論傳入多少關鍵字引數都可以正常執行 def qwer x,y,a print x,y,b qwer qwer a 1,b 2,c 3,d 4 qwer x 1,y 2 1 2 3 定義乙個函式無論傳入多少個位置引數和關鍵字都可以正常執行 def ...