向模組化進軍,建立類

broadviewbj發表於2012-06-08

向模組化進軍,建立類

在講解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

 

 向模組化進軍,建立類

本文節選自《基於MVCJavaScript. Web富應用開發》一書

(美)麥卡勞(MacCaw,A.)著

李晶,張散集譯

圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-731661

本書教你如何構建先進的富應用程式,書中給出的很多優秀的工具和最佳實踐都是很多程式設計師和工程師在工作中亟需的。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-732311/,如需轉載,請註明出處,否則將追究法律責任。

相關文章