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

首頁 > 編程 > JavaScript > 正文

Javascript中3種實現繼承的方法和代碼實例

2019-11-20 14:16:56
字體:
來源:轉載
供稿:網友

繼承是我們在實現面向對象編程的時候很重要的一個手段。雖然我們講不能過度繼承,多利用組合代替繼承,但是繼承總是免不了的。這里要討論的就是Javascript中的繼承機制。

Javascript中實際上是沒有繼承的概念的,但是我們可以通過一些手段來模仿實現它。這種繼承實際上把一個對象復制到另外一個對象內部。你需要注意的是所有的本地類和宿主類是不能作為基類被繼承的,主要是為了安全方面的考慮。

Javascript中的繼承大約有三類:1.對象冒充;2.原型繼承;3.二者的混合。

一、對象冒充

其實對象冒充是跟this關鍵字緊密聯系在一起的(所以說充分理解Javascript中的this關鍵字是多么的重要:P)。構造函數使用this來給屬性和方法賦值,而構造函數也可以看作為一個普通的函數,所以我們就可以使我們的基類的構造函數成為子類的構造函數,然后在子類的內部調用這個函數,那么子類就會得到父類的屬性和方法。

原理很簡單,那我們怎么實現呢?下面就以代碼示例,實際的操作一下。

對象冒充實現方法一,我們最常用的新建對象的方法:

復制代碼 代碼如下:

var classA = function(name){
 this.name = name;
 this.alertName = function(){
  alert(this.name);
 }
}
 
var classB = function(name,age){
 this.myConstructor = classA;
 this.myConstructor(name);
 delete this.myConstructor;
 
 this.age = age;
 this.alertAge = function(){
  alert(this.age);
 }
}

為了驗證以上的方法是否正確,你可以親自測試下,我將測試用的代碼寫在下面:

復制代碼 代碼如下:

var objA = new classA('DK');
objA.alertName();//DK
 
var objB = new classB('DS',20);
 
objB.alertName();//DS
objB.alertAge();//20

這就是所謂的對象冒充了,另外對象冒充還有另外兩種實現的方式,雖然它們的實現手段不一樣,但是它們的原理是一樣的。

對象冒充實現方法二,使用call方法:

復制代碼 代碼如下:

var classA = function(name){
 this.name = name;
 this.alertName = function(){
  alert(this.name);
 }
}
 
var classB = function(name,age){
 classA.call(this,name);
 
 this.age = age;
 this.alertAge = function(){
  alert(this.age);
 }
}

通過代碼也能看出來,第一種方法中我們新建了函數指針指向父類,調用函數,然后將指針刪除。而這里我們之間用call方法在this對象下面運行父類的構造函數,實現了同樣的目的。另外與call方法相對于的則就是apply方法啦。

對象冒充實現方法三,使用apply方法:

復制代碼 代碼如下:

var classA = function(name){
 this.name = name;
 this.alertName = function(){
  alert(this.name);
 }
}
 
var classB = function(name,age){
 classA.apply(this,new Array(name));
 
 this.age = age;
 this.alertAge = function(){
  alert(this.age);
 }
}

其實大家可以看到,apply方法跟call方法是非常類似的,只不過傳遞參數是略有不同罷了。

二、原型繼承

大家應該對prototype對象有所了解,原型對象上的所有屬性和方法將被傳遞給類的所有實例,所有當我們把父類的所有屬性和方法付給子類的prototype對象時也就相當于實現了我們的繼承。

子類想獲得父類的所有屬性和方法,那我們將父類的一個實例直接付給子類的prototype對象,那我們的子類不就相當于獲取了父類的所有對象和方法?

代碼示例伺候:

復制代碼 代碼如下:

var classA = function(){
 this.name = 'DK';
 this.alertName = function(){
  alert(this.name);
 }
}
 
var classB = function(name,age){
 this.name = name;
 this.age = age;
}
 
classB.prototype = new classA();
 
classB.prototype.alertAge = function(){
 alert(this.age);
}

注意這里的父類的構造函數需要確保沒有參數。因為即使有構造參數在實現原型繼承的時候你也無法傳遞=.=!

三、混合繼承

顧名思義,混合繼承就是前兩種方式的混合使用了。

復制代碼 代碼如下:

var classA = function(name){
 this.name = name;
}
 
classA.prototype.alertName = function(){
 alert(this.name);
}
 
var classB = function(name,age){
 classA.call(this,name);
 this.age = age;
}
 
classB.prototype = new classA();
 
classB.prototype.alertAge = function(){
 alert(this.age);
}

使用對象冒充實現了向父類傳遞參數,同時使用原型繼承實現了對公有方法的繼承。

說完了這三中繼承方式了,下面該說到問題的時候了。

你可能會不解,為什么有了對象冒充,有了原型繼承還要再弄出個什么混合繼承,對,最重要的也就是這個問題。

1.如果你實際測試一下,你會發現通過對象冒充的方式實現的繼承,子類是無法訪問到父類的原型鏈上的方法的。

2.而用原型繼承,則會把所有的屬性變成共享的屬性,如果你同一個子類實現兩個實例,你會發現你的所有實例共享所有的屬性。

3.但是這肯定是不合適的了。所以就有了混合繼承的方式,讓屬性繼續保持私有,同時讓子類能夠訪問父類的原型鏈的方法。

你可以親自動手試一下,在對象冒充繼承的時候,子類無法訪問父類的原型鏈方法,原型鏈繼承子類的所有實例共享所有父類屬性。這里我就不寫例子了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品天天狠天天看| 成人中文字幕+乱码+中文字幕| 综合久久五月天| 欧美综合激情网| 精品国产一区二区三区在线观看| 91精品在线看| 日本精品久久中文字幕佐佐木| 中文一区二区视频| 国产不卡在线观看| 一区二区三区国产视频| 亚洲午夜精品视频| 久久影院中文字幕| 91久久在线视频| 国产不卡在线观看| 亚洲精品国精品久久99热一| 不卡在线观看电视剧完整版| 日本精品va在线观看| 国产欧美最新羞羞视频在线观看| 8x拔播拔播x8国产精品| 美女999久久久精品视频| 在线丨暗呦小u女国产精品| 欧美床上激情在线观看| 国产精品丝袜久久久久久高清| 欧美激情第1页| 国产一区二区美女视频| 国产精品日韩av| 日韩不卡在线观看| 中文字幕日韩在线观看| 久久夜色精品国产亚洲aⅴ| 国产精品私拍pans大尺度在线| 美日韩精品免费视频| 国产精品久久久久久亚洲影视| 91久久精品国产91久久| 亚洲电影免费观看| 久久精品影视伊人网| 国产亚洲欧美日韩一区二区| 日韩免费观看高清| 欧美午夜无遮挡| 92版电视剧仙鹤神针在线观看| 日韩精品丝袜在线| 亚洲成人久久久久| 伊人一区二区三区久久精品| 欧美午夜视频在线观看| 成人国产精品av| 2018中文字幕一区二区三区| 亚洲欧美国产一区二区三区| 亚洲精品乱码久久久久久金桔影视| 欧美另类极品videosbest最新版本| 欧美极品美女视频网站在线观看免费| 欧美激情在线狂野欧美精品| 欧美富婆性猛交| 国产精品美女主播| 国产美女精品免费电影| 亚洲香蕉在线观看| 国产日韩换脸av一区在线观看| 久久人人爽人人爽人人片av高请| 亚洲精品99久久久久中文字幕| 亚洲欧美日本精品| 91国产美女视频| 日韩电影中文字幕在线观看| 国产日韩欧美中文在线播放| 日韩av网站在线| 亚洲精品视频在线观看视频| 久久久久99精品久久久久| 亚洲自拍小视频免费观看| 亚洲人成网站999久久久综合| 欧美精品在线免费播放| 亚洲另类欧美自拍| 亚洲福利在线观看| 97超级碰在线看视频免费在线看| 成人免费观看网址| 国产激情久久久久| 久久久免费精品视频| 北条麻妃一区二区三区中文字幕| 国产成人涩涩涩视频在线观看| 日本精品一区二区三区在线| 日韩av黄色在线观看| 中文在线不卡视频| 日本精品一区二区三区在线| 日韩美女写真福利在线观看| 成人444kkkk在线观看| 欧美精品久久久久久久久久| 国产精品永久在线| 另类专区欧美制服同性| 日韩国产欧美精品一区二区三区| 久久精品国产欧美亚洲人人爽| 亚洲精品国产精品乱码不99按摩| 性夜试看影院91社区| 日韩精品在线观看一区二区| 国产欧美亚洲精品| 欧美日韩国产色| 黑人与娇小精品av专区| 欧美在线视频在线播放完整版免费观看| 国产精品偷伦一区二区| 日韩精品免费在线视频| 亚洲天堂av在线播放| www.日本久久久久com.| 国产精品在线看| 中文欧美日本在线资源| 国产精品久久久久免费a∨| 亚洲成人动漫在线播放| 日本久久久久亚洲中字幕| 欧美在线亚洲一区| 久久久国产视频| 国产精品日日摸夜夜添夜夜av| 91福利视频在线观看| 亚洲电影天堂av| 热99精品只有里视频精品| 最新的欧美黄色| 国产精品99久久久久久人| 精品小视频在线| 国产精品视频久| 日韩最新av在线| 91国产精品电影| 亚洲四色影视在线观看| 不卡中文字幕av| 欧美日韩一区二区免费在线观看| 亚洲精品720p| 亚洲男人av在线| 97人洗澡人人免费公开视频碰碰碰| 亚洲国产三级网| 国产精品一香蕉国产线看观看| 欧美性在线观看| 最近2019年中文视频免费在线观看| 日韩免费观看高清| 国内精品中文字幕| 欧美日韩在线免费观看| 亚洲性猛交xxxxwww| 成人激情视频小说免费下载| 91精品在线看| 欧美日韩综合视频网址| 国产成人午夜视频网址| 中文字幕视频一区二区在线有码| 不卡在线观看电视剧完整版| 欧美激情区在线播放| 欧美日韩国产精品一区二区三区四区| 亚洲国内精品视频| …久久精品99久久香蕉国产| 国产一区二区三区在线免费观看| 美女久久久久久久| 欧美性猛交xxxx久久久| 亚洲成人黄色在线| 亚洲黄一区二区| 成人免费网视频| 国产视频亚洲精品| 18性欧美xxxⅹ性满足| 日韩精品免费综合视频在线播放| 欧美日韩国产在线播放| 欧美在线视频在线播放完整版免费观看| 亚洲一二三在线| 日韩中文字幕视频在线观看| 欧美成人黑人xx视频免费观看| 一个人看的www久久| 亚洲午夜精品视频| 精品久久久久久久中文字幕| 久久综合国产精品台湾中文娱乐网| 亚洲午夜精品视频| 久久婷婷国产麻豆91天堂| 久久99精品久久久久久噜噜| 亚洲最大福利视频网站| 欧美日韩国产精品| 伊人一区二区三区久久精品| 国产精品揄拍500视频| 国产91精品久久久久久久|