這篇文章主要介紹了一個簡單的JavaScript類框架,有助于初學者理解JS類的創建與繼承,需要的朋友可以參考下
在寫work-in-progress JavaScript book一書時,對于javascript繼承體系,我花費了相當的時間,并在該過程中研究了各種不同的模擬經典類繼承的方案。這些技術方案中,我最為推崇的是base2與Prototype的實現。
從這些方案中,應該能提煉出一個具有其思想內涵的框架,該框架須具有簡單、可重用、易于理解并無依賴等特點,其中簡單性與可用性是重點。以下是使用示例:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 var Person = Class. extend ( { init: function (isDancing ) { this. dancing = isDancing; }, dance: function ( ) { return this. dancing; } } ); var Ninja = Person.extend({ init: function(){ this._super( false ); }, dance: function(){ // Call the inherited version of dance() return this._super(); }, swingSword: function(){ return true; } }); var p = new Person(true); p.dance(); // => true var n = new Ninja(); n.dance(); // => false n.swingSword(); // => true // Should all be true p instanceof Person && p instanceof Class && n instanceof Ninja && n instanceof Person && n instanceof Class有幾點需要留意:
構造函數須簡單(通過init函數來實現),
新定義的類比須繼承于已有的類,
所有的‘類'都繼承于始祖類:Class,因此如果要創建一個全新的類,該類必須為Class的子類,
最具挑戰的一點:父類的被覆寫方法必須能訪問到(通過配置上下文環境)。
在上面的示例中,你能發現通過this._super()來調用Person父類的init()和dance()方法。
對結果相當滿意:使類的定義結構化,保持單一繼承,并且能夠調用超類方法。
簡單的類創建與繼承
下面為其實現(便于閱讀并有注釋),大概25行左右。歡迎并感謝提出建議。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 /* Simple JavaScript Inheritance * By John Resig http://ejohn.org/ * M新聞熱點
疑難解答