向模組化進軍,建立類
向模組化進軍,建立類
在講解MVC 的本質之前,我們首先給大家補習一下基礎知識,比如JavaScript. 的類和事件。只有打下一個堅實的基礎,才能更好地學習、理解更高階的概念。
對於靜態的類來說,JavaScript. 物件直接量就已經夠用了,但它對使用繼承和例項來建立經典的類往往更有幫助。有必要強調一下:JavaScript. 是基於原型的程式語言,並沒有包含內建類的實現。但透過JavaScript. 可以輕易地模擬出經典的類。
JavaScript. 中的類口碑並不太好,因為“不夠JavaScript”而飽受批評。jQuery 並沒有涉及太多架構方法和繼承模式,這讓JavaScript. 開發者確信自己不必考慮太多架構性的東西,甚至覺得類的用處不大或乾脆禁用類。實際上,類是另一種有用的工具,作為一名實用主義者,我相信類在JavaScript. 中的重要性絲毫不亞於它在其他現代程式語言中的重要性。
JavaScript. 中並沒有真正的類,但JavaScript. 中有建構函式和new 運算子。建構函式用來給例項物件初始化屬性和值。任何JavaScript. 函式都可以用做建構函式,建構函式必須使用new 運算子作為字首來建立新的例項。
new 運算子改變了函式的執行上下文,同時改變了return 語句的行為。實際上,使用new和建構函式很類似於傳統的實現了類的語言:
var Person = function(name) {
this.name = name;
};
// 例項化一個Person
var alice = new Person('alice');
// 檢查這個例項
assert( alice instanceof Person );
建構函式的命名通常使用駝峰命名法,首字母大寫,以此和普通的函式區分開來,這是一種習慣用法。記住這一點非常重要,因為你不會希望用省略new 字首的方式來呼叫建構函式。
// 不要這麼做!
Person('bob'); //=> undefined
這個函式只會返回undefined,並且執行上下文是window(全域性)物件,你無意間建立了一個全域性變數name。呼叫建構函式時不要丟掉new 關鍵字。
當使用new 關鍵字來呼叫建構函式時,執行上下文從全域性物件(window)變成一個空的上下文,這個上下文代表了新生成的例項。因此,this 關鍵字指向當前建立的例項。儘管理解起來有些繞,實際上其他語言內建類機制的實現也是如此。
預設情況下,如果你的建構函式中沒有返回任何內容,就會返回this——當前的上下文。要不然就返回任意非原始型別的值。比如,我們可以返回一個用以新建一個新類的函式,第一步要做的是建立自己的類模擬庫:
var Class = function(){
var klass = function(){
this.init.apply(this, arguments);
};
klass.prototype.init = function(){};
return klass;
};
var Person = new Class;
Person.prototype.init = function(){
// 基於Person 的例項做初始化
};
// 用法:
var person = new Person;
令人費解的是,由於 JavaScript. 2(
classes.html)規範從未被實現過,class 一直都是保留字。最常見的做法是將變數名class 改為_class 或klass。
本文節選自《基於MVC的JavaScript. Web富應用開發》一書
(美)麥卡勞(MacCaw,A.)著
李晶,張散集譯
圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-731661
本書教你如何構建先進的富應用程式,書中給出的很多優秀的工具和最佳實踐都是很多程式設計師和工程師在工作中亟需的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-732311/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 向分散式應用進軍分散式
- 女孩,向開發進軍吧!
- 向Linux進軍(X-Window配置指南) (轉)Linux
- 模組化日常:重名類
- 廣州軍區總醫院智慧“進化論”
- 向軍html視訊教程HTML
- 04-建立持久化類持久化
- [Android] 元件化 & 模組化 & 外掛化演進Android元件化
- Vuex 進階——模組化組織 VuexVue
- Javascript模組化的演進歷程JavaScript
- iOS 模組化進階整理記錄iOS
- 使用 Python 函式進行模組化Python函式
- Vue使用SCSS進行模組化開發VueCSS
- Python進階之物件導向(類的特殊方法)Python物件
- 這家真人互動遊戲的潛力股正式向這個賽道進軍了遊戲
- 微軟向英特爾等許可技術 大踏步進軍IP電話市場微軟
- JavaScript模組化開發的演進歷程JavaScript
- 模組化路由器的常見分類大全路由器
- AI仿生:人類進化新可能AI
- 騰訊遊戲用“代工”進軍海外遊戲
- python中類的建立和例項化Python
- 關於類的物件建立與初始化物件
- C#中類的建立和例項化C#
- 孫宇晨大舉進軍加勒比 火幣積極佈局全球化
- 小米進軍VR和機器人 米家軍要顛覆VR?VR機器人
- 前端進階課程之模組化(二)AMD規範前端
- 前端進階課程之模組化(三)CMD規範前端
- 進擊的模組化+webpack的簡單實現Web
- 二進位制 (小白進軍程式設計師)程式設計師
- 06 ## 模組分類
- 核心模組建立檔案
- Python中類建立和例項化過程Python
- VBA標準模組與類模組(轉)
- ForeVR Games進軍檯球遊戲VRGAM遊戲
- 向未來而生:百度的技術進化
- 藉助Python 函式進行模組化程式碼Python函式
- 掌握Java9模組化系統-進階部分Java
- pickle模組 collections模組在物件導向中的應用物件