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

首頁 > 編程 > JavaScript > 正文

js的2種繼承方式詳解

2019-11-20 21:00:18
字體:
來源:轉載
供稿:網友

js中繼承可以分為兩種:對象冒充和原型鏈方式

一、對象冒充包括三種:臨時屬性方式、call()及apply()方式
1.臨時屬性方式

復制代碼 代碼如下:

function Person(name){
     this.name = name;
     this.say = function(){
          alert('My name is '+this.name);
     }
}
function F2E(name,id){
     this.temp = Person;
     this.temp(name);
     delete this.temp;
     this.id = id;
     this.showId = function(){
          alert('Good morning,Sir,My work number is '+this.id);
     }
}
var simon = new F2E('Simon',9527);
simon.say();
simon.showId();

2.call()/apply()方式
實質上是改變了this指針的指向
復制代碼 代碼如下:

function Person(name){
     this.name = name;
     this.say = function(){
          alert('My name is '+this.name);
     }
}
function F2E(name,id){
     Person.call(this,name); //apply()方式改成Person.apply(this,new Array(name));
     this.id = id;
     this.showId = function(){
          alert('Good morning,Sir,My work number is '+this.id);
     }
}
var simon = new F2E('Simon',9527);
simon.say();
simon.showId();

缺點:先來看這么一張內存分配圖:

在OO概念中,new實例化后,對象就在堆內存中形成了自己的空間,值得注意的是,這個代碼段。而成員方法就是存在這個代碼段的,并且方法是共用的。問題就在這里,通過對象冒充方式繼承時,所有的成員方法都是指向this的,也就是說new之后,每個實例將都會擁有這個成員方法,并不是共用的,這就造成了大量的內存浪費。并且通過對象冒充的方式,無法繼承通過prototype方式定義的變量和方法,如以下代碼將會出錯:

復制代碼 代碼如下:

function Person(name){
     this.name = name;
     this.say = function(){
          alert('My name is '+this.name);
     }
}
Person.prototype.age = 20;
Person.prototype.sayAge = function(){alert('My age is '+this.age)};

function F2E(name,id){
     Person.apply(this,new Array(name));
     this.id = id;
     this.showId = function(){
          alert('Good morning,Sir,My work number is '+this.id);
     }
}

var simon = new F2E('Simon',9527);
simon.sayAge(); //提示TypeError: simon.sayAge is not a function

二、原型鏈方式
復制代碼 代碼如下:

function Person(){
     this.name = 'Simon';
}
Person.prototype.say = function(){
     alert('My name is '+this.name);
}

function F2E(id){
     this.id = id;
     this.showId = function(){
          alert('Good morning,Sir,My work number is '+this.id);
     }
}
F2E.prototype = new Person();

var simon = new F2E(9527);
simon.say();
simon.showId();
alert(simon.hasOwnProperty('id')); //檢查是否為自身屬性

接下來按照上面的例子來理解以下js原型鏈概念:

原型鏈可以理解成:js中每個對象均有一個隱藏的__proto__屬性,一個實例化對象的__proto__屬性指向其類的prototype方法,而這個prototype方法又可以被賦值成另一個實例化對象,這個對象的__proto__又需要指向其類,由此形成一條鏈,也就是前面代碼中的

復制代碼 代碼如下:

F2E.prototype = new Person()

這句是關鍵。js對象在讀取某個屬性時,會先查找自身屬性,沒有則再去依次查找原型鏈上對象的屬性。也就是說原型鏈的方法是可以共用的,這樣就解決了對象冒充浪費內存的缺點。

下面再來說缺點:
缺點顯而易見,原型鏈方式繼承,就是實例化子類時不能將參數傳給父類,也就是為什么這個例子中function Person()沒有參數,而是直接寫成了this.name=”Simon”的原因。下面的代碼將不能達到預期的效果:

復制代碼 代碼如下:

function Person(name){
     this.name = name;
}
Person.prototype.say = function(){
     alert('My name is '+this.name);
}

function F2E(name,id){
     this.id = id;
     this.showId = function(){
          alert('Good morning,Sir,My work number is '+this.id);
     }
}
F2E.prototype = new Person();

var simon = new F2E("Simon",9527);
simon.say();
simon.showId();

 
function Person(name){
     this.name = name;
}

Person.prototype.say = function(){
     alert('My name is '+this.name);
}

function F2E(name,id){
     this.id = id;
     this.showId = function(){
          alert('Good morning,Sir,My work number is '+this.id);
     }
}

F2E.prototype = new Person();  //此處無法進行傳值,this.name或者name都不行,直接寫F2E.prototype = new Person('wood')是可以的,但是這樣的話simon.say()就變成了My name is wood

var simon = new F2E("Simon",9527);
simon.say();  //彈出 My name is undefined
simon.showId();


最后,總結一下自認為較好的繼承實現方式,成員變量采用對象冒充方式,成員方法采用原型鏈方式,代碼如下:

復制代碼 代碼如下:

function Person(name){
     this.name = name;
}

Person.prototype.say = function(){
     alert('My name is '+this.name);
}

function F2E(name,id){
     Person.call(this,name);
     this.id = id;
}

F2E.prototype = new Person();
//此處注意一個細節,showId不能寫在F2E.prototype = new Person();前面
F2E.prototype.showId = function(){
     alert('Good morning,Sir,My work number is '+this.id);
}

var simon = new F2E("Simon",9527);
simon.say();
simon.showId();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲无线码在线一区观看| 欧美精品在线视频观看| 亚洲精品不卡在线| 国产伦精品免费视频| 亚洲成人av资源网| 狠狠久久亚洲欧美专区| 亚洲级视频在线观看免费1级| 成人写真视频福利网| 国产精品久久77777| 日本高清视频精品| 国产精品一区二区电影| 久久久久久有精品国产| 国产精品视频一| 久久欧美在线电影| 久久久久久九九九| 欧美成人在线免费| 国产精品一区二区三区久久| 精品视频在线观看日韩| 亚洲精品福利在线| 亚洲嫩模很污视频| 最好看的2019的中文字幕视频| 久久福利视频导航| 国产成人精品优优av| 国产成人高潮免费观看精品| 亚洲精品在线不卡| 国产综合色香蕉精品| 8x拔播拔播x8国产精品| 91久久久精品| 精品国产一区二区三区在线观看| 欧美巨猛xxxx猛交黑人97人| 亚洲无线码在线一区观看| 午夜精品在线视频| 亚洲另类xxxx| 国产精品嫩草视频| 国产日韩欧美在线看| 国产精品久久久久久久久久免费| 欧美高跟鞋交xxxxxhd| 亚洲国产精品va在线观看黑人| 亚洲理论在线a中文字幕| 亚洲成年人在线播放| 久久久久久成人| 一区二区欧美激情| 北条麻妃久久精品| 欧美巨猛xxxx猛交黑人97人| 中文字幕久热精品在线视频| 91老司机在线| 欧美尺度大的性做爰视频| 精品久久久久人成| 日韩国产精品亚洲а∨天堂免| 久久激情视频免费观看| 在线视频精品一| 精品一区电影国产| 欧美精品电影免费在线观看| 97视频在线观看免费高清完整版在线观看| 亚洲影影院av| 欧美日韩加勒比精品一区| 国产成人拍精品视频午夜网站| 中文字幕日韩av| 久久精品国产成人| 91av在线视频观看| 国产精国产精品| 国产亚洲一区二区精品| 亚洲人成伊人成综合网久久久| 亚洲精品av在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品久久久久久一区二区| 国产成人精品999| 欧美激情视频在线观看| 日韩成人网免费视频| 日韩av电影国产| 亚洲毛片在线看| 欧美大码xxxx| 国产精品99蜜臀久久不卡二区| 国语自产精品视频在线看抢先版图片| 在线亚洲午夜片av大片| 成人免费观看49www在线观看| 亚洲男人天堂2019| 欧美极品少妇与黑人| 亚洲欧美中文日韩v在线观看| 最新亚洲国产精品| 久久天堂av综合合色| 青青久久av北条麻妃黑人| 成人激情av在线| 色妞欧美日韩在线| 亚洲免费av网址| 日韩欧美亚洲国产一区| 国产成人精品一区二区在线| 亚洲第一色在线| 亚洲精品色婷婷福利天堂| 国产精品高潮呻吟久久av野狼| 91免费的视频在线播放| 日本一欧美一欧美一亚洲视频| 国产色婷婷国产综合在线理论片a| 国产精品免费小视频| 成人福利免费观看| 欧美日韩成人在线播放| 综合网中文字幕| 91久久中文字幕| 亚洲视频专区在线| 国产日韩在线视频| 久久久久成人精品| 欧美在线视频网| 亚州欧美日韩中文视频| 日韩在线观看免费| 久热99视频在线观看| 欧美限制级电影在线观看| 欧美国产日产韩国视频| 日韩小视频网址| 亚洲综合中文字幕68页| 国产精品成人一区二区三区吃奶| 成人黄色免费看| 国产精品欧美一区二区三区奶水| 亚洲小视频在线观看| 久久国产精品久久久久久久久久| 在线视频精品一| 亚洲乱码一区av黑人高潮| 欧美精品第一页在线播放| 欧美成人第一页| 欧日韩在线观看| 欧美精品aaa| 久久精品国产久精国产一老狼| 538国产精品一区二区免费视频| 久久99视频免费| 精品视频—区二区三区免费| 欧美最猛性xxxxx(亚洲精品)| 色偷偷av一区二区三区| 国产精品爱啪在线线免费观看| 久久99亚洲精品| 在线播放精品一区二区三区| 亚洲一区二区三区四区在线播放| 欧美在线一级va免费观看| 亚洲人成77777在线观看网| 日韩美女免费视频| 久久电影一区二区| 中文字幕日韩av电影| 欧美综合第一页| 欧美日韩999| 国内精品久久久久影院 日本资源| 亚洲va欧美va在线观看| 97视频免费观看| 日本高清不卡在线| 亚洲专区国产精品| 91精品国产自产91精品| 国产在线观看91精品一区| 91视频国产精品| 疯狂蹂躏欧美一区二区精品| 亚洲最大av在线| 欧美中文字幕在线| 欧美刺激性大交免费视频| 69视频在线播放| 成人性生交大片免费观看嘿嘿视频| 亚洲伊人成综合成人网| 久久国产精品久久国产精品| 欧美xxxx18国产| 欧美色播在线播放| 久久亚洲精品网站| 亚洲人线精品午夜| 亚洲精品久久久久久久久| 欧美高清videos高潮hd| 亚洲理论片在线观看| 国产精品久久久久不卡| 久久影视三级福利片| 精品国产拍在线观看| 久久久久久av|