最近因為學(xué)校做網(wǎng)站設(shè)計,所以一直在ASP上和數(shù)據(jù)庫上大費苦心。 我在前一個階段是做Java程序設(shè)計的。突然接到任務(wù)并學(xué)習(xí)ASP,所以我一直都熱忠并善于利用JavaScript來構(gòu)架ASP程序。 JavaScript的一個明顯的優(yōu)點就在于它可以定義和持有自己的對象。這一點好象是VBScript所無法比擬的。 有了這一點,可以利用JavaScript進行更接近于面向?qū)ο蟮某绦蛟O(shè)計。也許這將使網(wǎng)站開發(fā)更有樂趣... 但有個嚴重的缺點!JavaScript不支持繼承機制。不象Java那樣,支持extends關(guān)鍵字(雖然這個關(guān)鍵字在JavaScript中是保留字)。 在微軟的ASP.NET中,JavaScript才開始提供比較完善的支持。PHP語言當(dāng)然也有繼承機制的支持,這些都叫我垂青... 不過現(xiàn)在我根本無法說服學(xué)校的老頭子們買更好的域名空間,但是我也不想忍受ASP中無繼承機制之苦,所以急中生智,也就有了一些成果! JavaScript根本不支持繼承機制!這是肯定的。但是我們可以想辦法做些手腳,模擬一個出來。 廢話說了一堆,先來看一個例子:
function Person() { public: // 注意這個public! 其實沒有這樣的用法, 這只是我的習(xí)慣. 幸好在實際應(yīng)用中不會有錯 this.GetName=Person_mfGetName;
private: // 和public一樣, 這也是我的習(xí)慣 this.m_strName="Guest"; } function Person_mfGetName() { return this.m_strName; }
var MyPerson=new Person(); MyPerson.GetName();
你可以用任何輸出語句來查看結(jié)果。當(dāng)然這只是第一步! 下面是關(guān)鍵一步:繼承!
function Student() // Extends Class: Person { EXTENDS: // 我的習(xí)慣, 但要切記不能使用小寫字母. 因為extends是JavaScript中的保留字 this.Super=Person; // 定義指向其"父類構(gòu)造器". 這里的Super也不能用小寫形式 this.Super(); // 調(diào)用其"父類構(gòu)造器". 這樣就可以從"父類"那里"繼承"所有的屬性和方法
private: this.m_nStudentID=0; }
雖然在Student中并沒有看到GetName()方法,但是卻可以調(diào)用。因為他已經(jīng)繼承了Person的GetName()方法。
var MyStudent=new Student(); MyStudent.GetName(); // 注意, 調(diào)用的是其"父類"的GetName方法, 結(jié)果為返回 "Guest".
關(guān)于JavaScript繼承實現(xiàn)就是這樣。只要牢記兩步: 1: 在"子類"中先定義一個指向"父類"的函數(shù)(什么名字都可以,我習(xí)慣使用Super) 2: 隨后調(diào)用這個函數(shù) 這樣就可以繼承"父類"的所有屬性和方法! 我現(xiàn)在有些懷疑的是,既然extends和super都是保留字,那為什么JavaScript卻不支持繼承呢? 不知道有沒有其他更好的辦法?希望各位指點...
|