當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS中通过call方法实现继承
生活随笔
收集整理的這篇文章主要介紹了
JS中通过call方法实现继承
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JS中通過call方法實(shí)現(xiàn)繼承 原文:JS中通過call方法實(shí)現(xiàn)繼承
? 講解都寫在注釋里面了,有不對(duì)的地方請(qǐng)拍磚,謝謝!
?
<html xmlns="http://www.w3.org/1999/xhtml"> <head><title>JS通過call方法實(shí)現(xiàn)繼承</title> </head> <body><script type="text/javascript">/* js中的繼承有多種實(shí)現(xiàn)方式,今天我們討論下通過call方法實(shí)現(xiàn)的繼承。此方法與 原型鏈繼承 相比還是比較簡(jiǎn)單,容易理解的。那么,我們先對(duì)call方法進(jìn)行簡(jiǎn)單的講解:call 方法可以用一個(gè)對(duì)象來代替另一個(gè)對(duì)象調(diào)用一個(gè)方法。這句話蠻不好理解,還是看示例代碼吧,更直觀明了:*/function a() {this.name = "我是a";this.showName = function () {alert(this.name);}}function b() {this.name = "我是b";}var _a = new a();var _b = new b();//下面這行代碼的意思是:用 _b 來代替 _a 執(zhí)行 _a 的showName方法。//因此執(zhí)行對(duì)象從 _a 變成了 _b, showName方法里面的this此時(shí)指代的是 b 了,而不是 a//因此輸出結(jié)果為: 我是b _a.showName.call(_b);/*哎,語文沒學(xué)好,總感覺表達(dá)不清楚,也不知道大家能不能看懂。好了,進(jìn)入正題,我們來看繼承的實(shí)現(xiàn)。*//*首先我們要定義4個(gè)類:動(dòng)物(animal) ; 人(person) ; 中國(guó)人(chinese) ; 日本人(japanese)。代碼如下:*/function animal() {this.eat = function () {alert("動(dòng)物都要吃東西");}}function person() {this.say = function () {alert("人是會(huì)說話的");}}// function chinese() { // this.ch = function () { // alert("我是中國(guó)人"); // } // }// function japanese() { // this.ja = function () { // alert("我是日本人"); // } // }/* 然后實(shí)現(xiàn)4個(gè)類之間的關(guān)系關(guān)系如下: 中國(guó)人 繼承自 人日本人 繼承自 動(dòng)物 和 人說明: 在JS中是可以實(shí)現(xiàn)類的多繼承的。因此 japanese 可以同時(shí)繼承自 animal 和 person ,它不像C#和java語言,只支持接口的多繼承,而不支持類的多繼承。修改上面的chinese和japanese如下:*/function chinese() {person.call(this); //繼承自 person 類 (用chinese來代替person)this.ch = function () {alert("我是中國(guó)人");}}function japanese() {animal.call(this); //繼承自 animal 類 person.call(this); //繼承自 person 類this.ja = function () {alert("我是日本人");}}/*我們知道:實(shí)現(xiàn)繼承后,子類是可以擁有父類的公有字段和方法的。而父類不會(huì)擁有子類的任何東西說明:js中的 字段,方法 也是有公有和私有之分的。子類只能訪問到父類的公有字段和方法。 關(guān)于 js 中的 公有,私有,全局,靜態(tài) 等等的定義講解我會(huì)另寫一篇博文與大家討論。請(qǐng)看如下代碼:*///實(shí)例化對(duì)象var c = new chinese();var j = new japanese();var p = new person();c.say(); //擁有父類 person 的 say 方法 c.ch(); //自身的 ch 方法 j.eat(); //擁有父類 animal 的 eat 方法 j.say(); //擁有父類 person 的 say 方法 j.ja(); //自身的 ja 方法 p.say(); //自身的 say 方法/*下面兩句會(huì)報(bào)錯(cuò),因?yàn)楦割恜erson是不會(huì)擁有子類的任何東西的,所以p沒有ch和ja方法。p.ch();p.ja();*/</script> </body> </html>?
posted on 2014-11-02 14:47 NET未來之路 閱讀(...) 評(píng)論(...) 編輯 收藏
轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4069229.html
總結(jié)
以上是生活随笔為你收集整理的JS中通过call方法实现继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客网分糖果
- 下一篇: JavaScript学习杂记--对象和数