<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Javascript 繼承實現(xiàn)例子參考

    時間:2024-08-23 05:37:55 JavaScript 我要投稿
    • 相關(guān)推薦

    Javascript 繼承實現(xiàn)例子參考

      1. 創(chuàng)建基類

      首先考慮Polygon類。哪些屬性和方法是必需的?首先,一定要知道多邊形的邊數(shù),所以應(yīng)該加入整數(shù)屬性sides。還有什么是多邊形必需的?也許你想知道多邊形的面積,那么加入計算面積的方法getArea()。圖4-3展示了該類的UML表示。

      在UML中,屬性由屬性名和類型表示,位于緊接類名之下的單元中。方法位于屬性之下,說明方法名和返回值的類型。

      在ECMAScript中,可以如下編寫類:

      注意,Polygon類不夠詳細精確,還不能使用,方法getArea()返回0,因為它只是一個占位符,以便子類覆蓋。

      2. 創(chuàng)建子類

      現(xiàn)在考慮創(chuàng)建Triangle類。三角形具有三條邊,因此這個類必須覆蓋Polygon類的sides屬性,把它設(shè)置為3。還要覆蓋getArea()方法,使用三角形的面積公式,即1/2×底×高。但如何得到底和高的值呢?需要專門輸入這兩個值,所以必須創(chuàng)建base屬性和height屬性。Triangle類的UML表示如圖4-4所示。

      該圖只展示了Triangle類的新屬性及覆蓋過的方法。如果Triangle類沒有覆蓋getArea()方法,圖中將不會列出它。它將被看作從Polygon類保留下來的方法。完整的UML圖還展示了Polygon和Triangle類之間的關(guān)系(圖4-5),使它顯得更清楚。

      注意,雖然Polygon的構(gòu)造函數(shù)只接受一個參數(shù)sides,Triangle類的構(gòu)造函數(shù)卻接受兩個參數(shù),即base和height。這因為三角形的邊數(shù)是已知的,且不想讓開發(fā)者改變它。因此,使用對象冒充時,3作為對象的邊數(shù)被傳給Polygon的構(gòu)造函數(shù)。然后,把base和height的值賦予適當?shù)膶傩浴?/p>

      在用原型鏈繼承方法后,Triangle將覆蓋getArea()方法,提供為三角形面積定制的計算。

      最后一個類是Rectangle,它也繼承Polygon。矩形有四條邊,面積是用長度×寬度計算的,長度和寬度即成為該類必需的屬性。在前面的UML圖中,要把Rectangle類填充在Triangle類的旁邊,因為它們的超類都是Polygon(如圖4-6所示)。

      注意,Rectangle構(gòu)造函數(shù)不把sides作為參數(shù),同樣的,常量4被直接傳給Polygon構(gòu)造函數(shù)。與Triangle相似,Rectangle引入了兩個新的作為構(gòu)造函數(shù)的參數(shù)的屬性,然后覆蓋getArea()方法。

      3. 測試代碼

      可以運行下面代碼來測試為該示例創(chuàng)建的代碼:

      這段代碼創(chuàng)建一個三角形,底為12,高為4,還創(chuàng)建一個矩形,長為22,寬為10。然后輸出每種形狀的邊數(shù)及面積,證明sides屬性的賦值正確,getArea()方法返回正確的值。三角形的面積應(yīng)為24,矩形的面積應(yīng)該是220。

      4. 采用動態(tài)原型方法如何?

      前面的例子用對象定義的混合構(gòu)造函數(shù)/原型方式展示繼承機制,那么可以使用動態(tài)原型來實現(xiàn)繼承機制嗎?不能。

      繼承機制不能采用動態(tài)化的原因是,prototype對象的獨特本性。看下面代碼(這段代碼不正確,卻值得研究):

      上面的代碼展示了用動態(tài)原型定義的Polygon和Triangle類。錯誤在于突出顯示的設(shè)置Triangle.prototype屬性的代碼。從邏輯上講,這個位置是正確的,但從功能上講,卻是無效的。從技術(shù)上說來,在代碼運行前,對象已被實例化,并與原始的prototype對象聯(lián)系在一起了。雖然用極晚綁定可使對原型對象的修改正確地反映出來,但替換prototype對象卻不會對該對象產(chǎn)生任何影響。只有未來的對象實例才會反映出這種改變,這就使第一個實例變得不正確。

      要正確使用動態(tài)原型實現(xiàn)繼承機制,必須在構(gòu)造函數(shù)外賦予新的prototype對象,如下所示:

      這段代碼有效,因為是在任何對象實例化前給prototype對象賦值的。遺憾的是,這意味著不能把這段代碼完整的封裝在構(gòu)造函數(shù)中了,而這正是動態(tài)原型的主旨。

      

    【Javascript 繼承實現(xiàn)例子參考】相關(guān)文章:

    JavaScript實現(xiàn)網(wǎng)頁刷新代碼段08-07

    常用排序算法之JavaScript實現(xiàn)代碼段06-04

    JavaScript 小型打飛機游戲?qū)崿F(xiàn)和原理說明08-18

    有關(guān)javascript實現(xiàn)的多個層切換效果通用函數(shù)示例10-07

    關(guān)jQuery彈出窗口簡單實現(xiàn)代碼-javascript編程06-07

    JavaScript類定義原型方法的兩種實現(xiàn)的區(qū)別07-11

    對javascript的理解08-08

    關(guān)于ASP.NET使用JavaScript顯示信息提示窗口實現(xiàn)原理及代碼05-09

    常用的JavaScript模式09-22

    Javascript的this用法簡述08-15

    主站蜘蛛池模板: 国产亚洲精品自在线观看| 久久久国产精品| 精品人妻少妇一区二区三区在线 | 久久亚洲中文字幕精品一区| 999在线视频精品免费播放观看 | 中文字幕乱码中文乱码51精品 | 中文字幕精品一区| 国产微拍精品一区二区| 69SEX久久精品国产麻豆| 亚洲七七久久精品中文国产| 国产精品五月天强力打造| 欧美精品香蕉在线观看网| 国产精品乱码高清在线观看| 午夜精品久久久久久久| 欧美激情精品久久久久久| 国产精品无码DVD在线观看| 999国产精品视频| 久久精品一区二区国产| 国产99视频精品免费专区| 精品久久久噜噜噜久久久 | 欧美日韩专区麻豆精品在线| 国产精品综合专区中文字幕免费播放| 久久精品国产精品国产精品污| 国产l精品国产亚洲区在线观看| 国产亚洲欧美精品久久久| 漂亮人妻被黑人久久精品| 亚洲国产精品无码专区影院| 一区二区国产精品 | 国产精品美女网站在线观看| 热99re久久国超精品首页| 九九热在线精品视频| 国产成人精品免费视| 孩交VIDEOS精品乱子| 国产午夜精品一区二区三区漫画| 欧洲精品99毛片免费高清观看 | 99久久综合国产精品二区| 99精品视频在线观看婷| 91人前露出精品国产| 四虎成人欧美精品在永久在线| 2022精品国偷自产免费观看| 成人精品一区二区三区|