js基于面向?qū)ο蟮募夹g(shù)

js基于面向?qū)ο蟮募夹g(shù)

ID:11631114

大?。?89.50 KB

頁數(shù):12頁

時間:2018-07-13

js基于面向?qū)ο蟮募夹g(shù)_第1頁
js基于面向?qū)ο蟮募夹g(shù)_第2頁
js基于面向?qū)ο蟮募夹g(shù)_第3頁
js基于面向?qū)ο蟮募夹g(shù)_第4頁
js基于面向?qū)ο蟮募夹g(shù)_第5頁
資源描述:

《js基于面向?qū)ο蟮募夹g(shù)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、JavaScript繼承詳解(一)時間:2009-07-08Tag:繼承?面向?qū)ο笈c基于對象幾乎每個開發(fā)人員都有面向?qū)ο笳Z言(比如C++、C#、Java)的開發(fā)經(jīng)驗。在傳統(tǒng)面向?qū)ο蟮恼Z言中,有兩個非常重要的概念-類和實例。類定義了一類事物公共的行為和方法;而實例則是類的一個具體實現(xiàn)。我們還知道,面向?qū)ο缶幊逃腥齻€重要的概念-封裝、繼承和多態(tài)。但是在JavaScript的世界中,所有的這一切特性似乎都不存在。因為JavaScript本身不是面向?qū)ο蟮恼Z言,而是基于對象的語言。這里面就有一些有趣的特性,比如JavaScript中所有事物都是對象,包括字符串、數(shù)組、日期、數(shù)字,甚

2、至是函數(shù),比如下面這個例子://定義一個函數(shù)-addfunctionadd(a,b){add.invokeTimes++;returna+b;}//因為函數(shù)本身也是對象,這里為函數(shù)add定義一個屬性,用來記錄此函數(shù)被調(diào)用的次數(shù)add.invokeTimes=0;add(1+1);add(2+3);console.log(add.invokeTimes);//2模擬JavaScript中類和繼承在面向?qū)ο蟮恼Z言中,我們使用類來創(chuàng)建一個自定義對象。然而JavaScript中所有事物都是對象,那么用什么辦法來創(chuàng)建自定義對象呢?這就需要引入另外一個概念-原型(prototype),

3、我們可以簡單的把prototype看做是一個模版,新創(chuàng)建的自定義對象都是這個模版(prototype)的一個拷貝(實際上不是拷貝而是鏈接,只不過這種鏈接是不可見,給人們的感覺好像是拷貝)。讓我們看一下通過prototype創(chuàng)建自定義對象的一個例子://構(gòu)造函數(shù)functionPerson(name,sex){this.name=name;this.sex=sex;}//定義Person的原型,原型中的屬性可以被自定義對象引用Person.prototype={getName:function(){returnthis.name;},getSex:function(){ret

4、urnthis.sex;}}這里我們把函數(shù)Person稱為構(gòu)造函數(shù),也就是創(chuàng)建自定義對象的函數(shù)??梢钥闯?,JavaScript通過構(gòu)造函數(shù)和原型的方式模擬實現(xiàn)了類的功能。創(chuàng)建自定義對象(實例化類)的代碼:varzhang=newPerson("ZhangSan","man");console.log(zhang.getName());//"ZhangSan"varchun=newPerson("ChunHua","woman");console.log(chun.getName());//"ChunHua"當(dāng)代碼varzhang=newPerson("ZhangSan","

5、man")執(zhí)行時,其實內(nèi)部做了如下幾件事情:·創(chuàng)建一個空白對象(newObject())。·拷貝Person.prototype中的屬性(鍵值對)到這個空對象中(我們前面提到,內(nèi)部實現(xiàn)時不是拷貝而是一個隱藏的鏈接)。·將這個對象通過this關(guān)鍵字傳遞到構(gòu)造函數(shù)中并執(zhí)行構(gòu)造函數(shù)?!⑦@個對象賦值給變量zhang。為了證明prototype模版并不是被拷貝到實例化的對象中,而是一種鏈接的方式,請看如下代碼:functionPerson(name,sex){this.name=name;this.sex=sex;}Person.prototype.age=20;varzhang=

6、newPerson("ZhangSan","man");console.log(zhang.age);//20//覆蓋prototype中的age屬性zhang.age=19;console.log(zhang.age);//19deletezhang.age;//在刪除實例屬性age后,此屬性值又從prototype中獲取console.log(zhang.age);//20這種在JavaScript內(nèi)部實現(xiàn)的隱藏的prototype鏈接,是JavaScript賴以生存的溫潤土壤,也是模擬實現(xiàn)繼承的基礎(chǔ)。如何在JavaScript中實現(xiàn)簡單的繼承?下面的例子將創(chuàng)建一個雇員

7、類Employee,它從Person繼承了原型prototype中的所有屬性。functionEmployee(name,sex,employeeID){this.name=name;this.sex=sex;this.employeeID=employeeID;}//將Employee的原型指向Person的一個實例//因為Person的實例可以調(diào)用Person原型中的方法,所以Employee的實例也可以調(diào)用Person原型中的所有屬性。Employee.prototype=newPerson();Employ

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。