天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Javascript 繼承實現例子

1. 創建基類

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

圖 4-3

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

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

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

2. 創建子類

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

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

在UML中,決不會重復顯示繼承的屬性和方法,除非該方法被覆蓋(或被重載,這在ECMAScript中是不可能的)。

Triangle類的代碼如下:

注意,雖然Polygon的構造函數只接受一個參數sides,Triangle類的構造函數卻接受兩個參數,即base和height。這因為三角形的邊數是已知的,且不想讓開發者改變它。因此,使用對象冒充時,3作為對象的邊數被傳給Polygon的構造函數。然后,把base和height的值賦予適當的屬性。

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

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

圖  4-6

Rectangle的ECMAScript代碼如下:

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

3. 測試代碼

可以運行下面代碼來測試為該示例創建的代碼:

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

4. 采用動態原型方法如何?

前面的例子用對象定義的混合構造函數/原型方式展示繼承機制,那么可以使用動態原型來實現繼承機制嗎?不能。

繼承機制不能采用動態化的原因是,prototype對象的獨特本性??聪旅娲a(這段代碼不正確,卻值得研究):

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

要正確使用動態原型實現繼承機制,必須在構造函數外賦予新的prototype對象,如下所示:

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

JavaScript技術Javascript 繼承實現例子,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲精品沙发午睡系列 | 免费观看男生桶美女私人部位 | 国产免费啪嗒啪嗒视频看看 | 亚在线观看免费视频入口 | 秋霞三级理伦免费观看 | 国产成人免费 | 国产伦精品一区二区三区免费观看 | 午夜十八岁禁 | 少妇伦子伦精品无码 | 杨幂视频在线观看1分30秒 | 甜性涩爱下载 | 国产精品久久久久久亚洲影视 | 双手绑在床头调教乳尖 | 一级特黄aa大片欧美 | 摸老师丝袜小内内摸出水 | 色婷婷国产精品视频一区二区 | 一品道门在线视频高清完整版 | 亚洲AV國產国产久青草 | 伦理片在线线249 | 久久re视频精品538在线 | 2021久久精品免费观看 | 97人妻碰视频在线观看 | 乳液全集电影在线观看 | 国内精品久久久久影院老司 | 亚洲无线码一区在线观看 | 久久re热在线视频精69 | 无颜之月5集全免费看无删除 | 亚洲精品色情婷婷在线播放 | 我的美女房东未删减版免费观看 | 欧美一区二区VA毛片视频 | 国产亚洲精品AV片在线观看播放 | 久久精品电影院 | 国产成人综合视频 | 在线 自拍 综合 亚洲 欧美 | 真实伦 乱| jizzzz亚洲丰满xxxx| 国产精品久久久久永久免费看 | 美艳人妻在厨房翘着屁股 | 国产剧情在线精品视频不卡 | 印度老妇女bbbxxx | 伊人综合在线影院 |