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