javascript
[原创] JS 继承详解。欢迎拍砖
? ? 最近迷上了JS 沒辦法 搞WEB離不開這東西 ,所以如果哪位仁兄還說JS無用論 還請繞道
? ? 過開發積累的經驗 加上書本上的知識 (也算是理論與實際相結合吧)總結此文 也算是自己學習階段的一份總結吧 !希望給廣大JS 愛愛好者一點幫助
? ? 廢話不多說 ? JS 繼承一般分為3種 今天先說第一種類式繼承
?
? ? 首先來說JS 本事是沒有類的概念的 。JS 的類實際就是function 對象 先上碼
<script> function Test(name){this.name = name; } Test.prototype.fun = function(){alert(0)} testInc = new Test('111'); testInc.fun(); console.dir(testInc) </script>? ? 首先,我們定義了function?Test ? 我們可以把這個當成一個類 類似 class Test{}
? ? 然后我們定義了類的一個屬性name ?,給這個方法(類)的prototype屬性定義了一個方法 //alert(0)
? ? 剩下的動作相信無論搞什么語言的同學都知道了。 ?
? ? 介紹下prototype 屬性。 當你定義了一個方法的時候(也可以像我們這樣把他當成類) 方法都會創建一個prototype屬性 用來返回對象類型原想的引用的
? ? 具體是都有什么有興趣的同學?可以console.dir(Test); 在chrome或者fireFox上看下
? ? 通過給Function 的prototype 添加方法的過程 我們可以實現動態的 給類添加方法 并且在實例中調用他
? ? 好了,準備工作完畢 然后我們創建一個子類 實現JS繼承 ?首先JS 是沒有extend 這種關鍵字的。(自定義的除外)
? ? 但是根據上面的思路我們可以給一個類 添加 另一個類的屬性 和方法 實現繼承關系(并不是真的繼承)代碼如下
? ?
<script> function Test(name){this.name = name; } Test.prototype.fun = function(){alert('my name is '+this.name);} function subTest(name,age){Test.call(this,name); //實現屬性繼承this.age = age } subTest.prototype = new Test(); //實現方法繼承 subTest.prototype.constructor = subTest; subTest.prototype.subfun = function (){alert('my name is'+this.name+' and my age is '+this.age)} subTestIns = new subTest('xiaojiang','24'); subTestIns.fun(); //my name is testName subTestIns.subfun(); //my name is testName and my age is testAge </script>call?調用一個對象的一個方法,以另一個對象替換當前對象 ?
call([thisObj[,arg1[, arg2[, [,.argN]]]]])?
參數?
thisObj?
可選項。將被用作當前對象的對象。?
arg1, arg2, , argN?
可選項。將被傳遞方法參數序列。 同樣的方法還有 apply 只是把call后面的參數改成 Array 調用罷了
這樣可以使 子類獲得父類的屬性name; ?
再把父類的方法附加給子類 這樣就實現了JS 的類式繼承。 ??
? ? ?
? ? ?
總結
以上是生活随笔為你收集整理的[原创] JS 继承详解。欢迎拍砖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux信号实践(1) --Linux
- 下一篇: 图卷积网络初探【GCN】