亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

JavaScript模擬實現繼承的方法

2024-05-06 16:17:50
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了JavaScript模擬實現繼承的方法,實例分析了javascript類的操作與模擬實現繼承的技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了JavaScript模擬實現繼承的方法。分享給大家供大家參考。具體分析如下:

我們都知道,在JavaScript中只能模擬實現OO中的"類",也就意味著,在JavaScript中沒有類的繼承。我們也只能通過在原對象里添加或改寫屬性來模擬實現。

先定義一個父類,

 

 
  1. //父類 
  2. function ParentClass() { 
  3. this.className = "ParentClass"
  4. this.auth = "Auth"
  5. this.version = "V1.0"
  6. this.parentClassInfo = function () { 
  7. return this.className + "/n" + this.auth + "/n" + this.version; 

一、prototype 實現:

 

 
  1. //子類 
  2. //1、prototype繼承 
  3. function ChildClassByPrototype() { 
  4. this.date = "2013-07-26"
  5. this.classInfo = function () { 
  6. return this.parentClassInfo() + "/n" + this.date; 
  7. ChildClassByPrototype.prototype = new ParentClass(); 
  8. var cctest1 = new ChildClassByPrototype(); 
  9. cctest1.parentClassInfo(); 
  10. cctest1.classInfo(); 

這種方式很簡單,只需把父類的實例賦值給子類的prototype屬性就行了,然后子類就可以使用父親的方法和屬性了。這里其實是用到了原型鏈向上查找的特性,比如這個例子中的 cctest1.parentClassInfo() 方法,JavaScript會先在ChildClassByPrototype的實例中查找是否有parentClassInfo()方法,子類中沒有,所以繼續查找ChildClassByPrototype.prototype屬性,而其prototype屬性的值是ParentClass的一個實例,該實例有parentClassInfo()方法,于是查找結束,調用成功。

二、apply 實現:

 

 
  1. //2、apply繼承 
  2. function ChildClassByApply() { 
  3. ParentClass.apply(thisnew Array()); 
  4. //ParentClass.apply(this, []); 
  5. this.date = "2013-07-26"
  6. this.classInfo = function () { 
  7. return this.parentClassInfo() + "/n" + this.date; 

JavaScript中的apply可以理解為用A方法替換B方法,第一個參數為B方法的對象本身,第二個參數為一個數組,該數組內的值為需要傳遞給A方法對應的參數列表,如果參數為空,即沒有參數傳遞,可通過 new Array()、[] 來傳遞。

三、call + prototype 實現:

 

 
  1. //3、call+prototype繼承 
  2. function ChildClassByCall() { 
  3. ParentClass.call(this, arguments); 
  4. this.date = "2013-07-26"
  5. this.classInfo = function () { 
  6. return this.parentClassInfo() + "/n" + this.date; 
  7. ChildClassByCall.prototype = new ParentClass(); 

call和apply作用類似,即都是用A方法替換B方法,只是傳遞的參數不一樣,call方法的第一個參數為B方法的對象本身,后續的參數則不用Array包裝,需直接依次進行傳遞。既然作用差不多,為何多了一句 原型賦值呢?這是因為call方法只實現了方法的替換而沒有對對象屬性進行復制操作。

每種方法都有其適用環境,比如,如果父類帶有有參構造函數:

 

 
  1. function ParentClass(className, auth, version) { 
  2. this.className = className; 
  3. this.auth = auth; 
  4. this.version = version; 
  5. this.parentClassInfo = function () { 
  6. return this.className + "/n" + this.auth + "/n" + this.version; 

這種情況下,prototype就不適用了,可選用apply或call;

 

 
  1. function ChildClassByApply(className, auth, version) { 
  2. ParentClass.apply(this, [className, auth, version]); 
  3. this.date = "2013-07-26"
  4. this.classInfo = function () { 
  5. return this.parentClassInfo() + "/n" + this.date; 
  6. function ChildClassByCall(className, auth, version) { 
  7. ParentClass.call(this, arguments[0], arguments[1], arguments[2]); 
  8. //ParentClass.call(this, className, auth, version); 
  9. this.date = "2013-07-26"
  10. this.classInfo = function () { 
  11. return this.parentClassInfo() + "/n" + this.date; 
  12. ChildClassByCall.prototype = new ParentClass(); 

實例化:

 

 
  1. var cctest2 = new ChildClassByApply("ParentClass""Auth""V1.0"); 
  2. var cctest3 = new ChildClassByCall("ParentClass""Auth""V1.0"); 

在apply和call中,又該如何取舍呢?在OO的繼承中,子類繼承于父類,那么它應該也是父類的類型。即,ChildClassByCall、ChildClassByApply應該也是ParentClass類型,但我們用"instanceof"檢測一下就會發現,通過apply繼承的子類,并非ParentClass類型。所以,我們建議用call + prototype 來模擬實現繼承。據說,Google Map API 的繼承就是使用這種方式喲。

希望本文所述對大家的javascript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲亚裔videos黑人hd| 欧美人在线视频| 日韩成人久久久| 欧美激情综合色综合啪啪五月| 美女少妇精品视频| 久久久久亚洲精品成人网小说| 欧美成人黑人xx视频免费观看| 社区色欧美激情 | 久久久91精品| 欧美日韩成人黄色| 欧美大全免费观看电视剧大泉洋| 色综合久久久888| 亚洲成人激情在线| 欧美一级高清免费| 国产一区二区三区高清在线观看| 成人网页在线免费观看| 欧美日韩中文字幕综合视频| 亚洲老司机av| 久久久久免费视频| 欧美大片欧美激情性色a∨久久| 国内成人精品视频| 亚洲成人精品久久| 久久精品一区中文字幕| 国产精品丝袜久久久久久不卡| 日本精品久久久久影院| 国产精品久久激情| 成人深夜直播免费观看| 亚洲电影免费观看高清完整版| 久久在线免费观看视频| 亚洲精品电影久久久| 国产精品你懂得| 大荫蒂欧美视频另类xxxx| 国产精品一区二区三| 亚洲自拍另类欧美丝袜| 亚洲春色另类小说| 久久天堂av综合合色| 日韩av在线影视| 国产精品高潮粉嫩av| 欧美国产日韩一区二区三区| www.日韩视频| www.亚洲男人天堂| 国产视频精品免费播放| 国产精品视频男人的天堂| 精品亚洲永久免费精品| 中国人与牲禽动交精品| 国产精品成人va在线观看| 日韩中文字幕精品视频| 国外成人在线直播| 国产精品偷伦一区二区| 国产精品视频内| 国产美女高潮久久白浆| 国产91精品最新在线播放| 国产美女久久精品| 久久亚洲精品小早川怜子66| 久久久国产精品视频| 久久精品国产久精国产思思| 亚洲影影院av| 精品福利视频导航| 成人免费在线视频网址| 欧美日韩国产一中文字不卡| 国产精品丝袜高跟| 亚洲成成品网站| 国产91在线播放精品91| 欧美日韩在线视频一区| 日韩成人激情影院| 欧美日韩在线另类| 红桃av永久久久| 欧美日韩中国免费专区在线看| 国产精品女主播| 国产午夜精品全部视频在线播放| 亚洲精品久久在线| 亚洲自拍偷拍福利| 国产一级揄自揄精品视频| 日韩精品亚洲精品| 91经典在线视频| 色偷偷综合社区| 麻豆国产va免费精品高清在线| 欧美成人精品一区二区三区| 国产精品一区二区三区在线播放| 国产精品嫩草影院一区二区| 中文字幕日韩视频| 色综合色综合久久综合频道88| 国产日韩在线精品av| 久久久久久久国产精品| 欧美日韩电影在线观看| 亚洲va国产va天堂va久久| 国产精品视频自在线| 欧美丝袜一区二区| 国产精品扒开腿做爽爽爽男男| 91在线高清视频| 欧美精品九九久久| 日韩视频精品在线| 亚洲国产精品女人久久久| 久久精品91久久久久久再现| 欧美俄罗斯性视频| 中文字幕精品视频| 91久久综合亚洲鲁鲁五月天| 日本高清不卡的在线| 精品久久久久久久久中文字幕| 91精品国产自产在线观看永久| 自拍偷拍亚洲精品| 2019中文在线观看| 国产精品成人av性教育| 欧美高清视频在线| 黄色成人在线免费| 欧美在线影院在线视频| 成人亚洲综合色就1024| 欧美视频在线免费| 国产精品久久久久久久久免费| 国产精品一区二区三区在线播放| 91精品免费视频| 欧美日韩国产成人在线| 欧美国产日韩精品| 久久久精品欧美| 国产精品免费久久久久久| www.xxxx精品| 国产精品成人在线| 国产啪精品视频| 在线性视频日韩欧美| 亚洲第一区第二区| 日韩天堂在线视频| 欧美大尺度在线观看| 久久亚洲综合国产精品99麻豆精品福利| 欧美理论片在线观看| 欧美午夜激情小视频| xxav国产精品美女主播| 91久久久国产精品| 亚洲激情自拍图| 成人在线小视频| 日韩极品精品视频免费观看| 91情侣偷在线精品国产| 亚洲自拍欧美色图| 免费99精品国产自在在线| 人人爽久久涩噜噜噜网站| 亚洲免费一级电影| 亚洲开心激情网| 国内伊人久久久久久网站视频| 国产91av在线| 国产午夜精品一区理论片飘花| 91精品国产91久久久久久最新| 91在线精品播放| 欧美激情一区二区三区在线视频观看| 色综合久久天天综线观看| 欧美大片在线免费观看| 欧洲成人在线视频| 97超碰色婷婷| 欧美黑人狂野猛交老妇| 国内精品视频在线| 尤物精品国产第一福利三区| 蜜臀久久99精品久久久无需会员| 91精品视频在线| 国产精品免费久久久| 欧美日韩一区二区免费视频| 亚洲成人网在线| 国产日韩一区在线| 久久久久久久久久久久av| 欧美理论电影在线播放| 国产午夜精品一区理论片飘花| 欧美日韩国产成人| 国产精品免费一区二区三区都可以| 国产三级精品网站| 久久久久日韩精品久久久男男| 91视频8mav| 久久久精品国产一区二区|