遺憾的是,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 ...