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

首頁 > 編程 > JavaScript > 正文

JavaScript繼承與聚合實例詳解

2019-11-19 12:14:14
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript繼承與聚合。分享給大家供大家參考,具體如下:

一、繼承

第一種方式:類與被繼承類直接耦合度高

1. 首先,準備一個可以被繼承的類(父類),例如

//創建一個人員類function Person(name) {//現在Person里面的域是由Person里面的來this來控制的  this.name=name;}

2. 然后,有個需要繼承父類的子類

function Teacher(name,books) {  Person.call(this,name);//相當于java中的super函數 在new Teacher時將Person的name初始化  this.books=books;}

說明一下:

(1)call方法可以將一個函數的對象上下文從初始化變成由this來決定一個類去控制另一個類

(2)Teacher類去控制 Person類 用Teacher域里面的 this來控制Person域里面的 this

(3)調用 Perosn的構造函數,因為Perosn沒有用 new 所以是個空對象(模板)     顯示調用call方法,可以初始化 Person

3. 最后,實現繼承

(步驟1)先繼承

Teacher.prototype=new Person();Teacher.prototype.constructor=Teacher;//確保繼承后任然是Teacher自己的構造函數

(步驟2)為子類擴展一些方法,用于訪問從父類繼承的內容

Teacher.prototype.getBook=function () {  return this.name+" "+this.books;}

(步驟3)使用已經繼承好的類

var jim=new Teacher("Jim","Javascript");alert(jim.getBook())

總結:此種方法是直接在子類中顯示調用父類,耦合度高,復用性差。

第二種方式,使用封裝,完成程序中所用繼承操作

1. 首先,準備一個可以被繼承的類(父類),例如

//創建一個人員類function Person(name) {//現在Person里面的域由Person里面的來this來控制的  this.name=name;}

2. 創建extend函數為了程序中所有的繼承操作(最重要的地方)

/*創建extend函數為了程序中所有的繼承操作*///subClass:子類 superClass:超類(2)function extend(subClass,superClass) {    //1,使子類原型屬性等于父類的原型屬性    //初始化一個中間空對象,目的是為了轉換主父關系    var F = function () {};    F.prototype = superClass.prototype;    //2, 讓子類繼承F    subClass.prototype = new F();    subClass.prototype.constructor = subClass;    //3,為子類增加屬性 superClass ==》原型鏈的引用    subClass.superClass = superClass.prototype;    //4,增加一個保險,就算你的原型類是超類(Object)那么也要把你的構造函數級別降下來  【說明一些:這里只是其中一個簡單的保險,其余情況后續增加。。?!?   if (superClass.prototype.constructor == Object.prototype.constructor) {      superClass.prototype.constructor = superClass;    }}

3. 有一個需要繼承其他類的子類

function Author(name,books) {  Author.superClass.constructor.call(this,name);//沒有直接寫父類,降低了耦合度  //Person.call(this,name)  直接寫Person代表其構造函數  this.books=books;  this.getBooks=function () {    return this.name+" "+this.books ;  }}

4. 最后,實現繼承

//繼承extend(Author,Person);//(子類,父類)

5. 使用已經繼承好的類

var peter=new Author("Peter","Javascript");alert(peter.getBooks());

方式二圖解為:

 

這里可能會有一個疑問就是為啥要使用中間類???

這里假如沒有中間類的話,我們在實例化子類時就需要為父類傳遞一些相應的參數,這樣的話,該句代碼

Author.superClass.constructor.call(this,name);

就不能放在子類(Author)中,而是需要放入到extend中,這樣的話代碼的通用性就很低,故此需要使用中間類。

二、聚合

使用聚合的原因,有的時候不需要嚴格的繼承,我們真正需要的是一個類(或幾個類)中的一些函數。故此我們可以使用聚合 也就是使用 摻元類

 對于聚合有兩種情況

第一種是聚合到 var a={}空類或者不是用function聲明的類中

1. 首先,需要一個合適的可以被聚合的類(給體),此時需要在本類的內部進行擴展屬性,方法

var JSON={//寫到類的內部    toJsonString:function () {      var output=[];      for(key in this){//this代表那個調用,就指向那個一個對象        output.push(key+"---->"+this[key]);      }      return output;    }};

2. 制作一個聚合函數(最重要)

/*聚合函數receivingClass:接受聚合內容的類givingClass:被聚合的目標類* */function mixin(receivingClass,givingClass){    for(methodName in givingClass){      if(!receivingClass.__proto__[methodName]){//判斷當前原型中是否含有即將要被聚合的方法,若沒有則聚合進來        receivingClass.__proto__[methodName]=givingClass[methodName];//直接獲得類中的方法,因為方法是直接寫在方法內部的。      }    }}


3. 接受聚合的類(受體)

var get={name:"Text",age:20};

4. 實現將JSON類的方法聚合到類get中

mixin(get,JSON);//(受體,給體)

5. 使用get類中聚合的方法

document.write(get.toJsonString().join(","));

第二種是聚合用function聲明的類中

var a=function(){}

1. 首先,需要一個合適的可以被聚合的類(給體),此時需要在本類的原型對象上進行擴展屬性,方法

var JSON={};JSON.prototype={//寫到類的原型對象上 toJsonString:function () { var output=[]; for(key in this){//this代表那個調用,就指向那個一個對象 output.push(key+"---->"+this[key]); } return output; }}

2. 制作一個聚合函數

(2)制作聚合函數(receivingClass中聚合givingClass中的屬性,或者方法)

function mixin(receivingClass,givingClass) { for(methodName in givingClass.prototype){ if(!receivingClass.prototype[methodName]){//判斷當前原型中是否含有即將要被聚合的方法,若沒有則聚合進來 receivingClass.prototype[methodName]=givingClass.prototype[methodName]; } }}

3. 接受 聚合的類(受體)

var o=function () { this.name="聚合"; this.age=19;}

4. 實現JSON類到o類的聚合(將JSON類中的方法聚合到o類中)

mixin(o,JSON);//(受體,給體)

5. 使用o類中聚合而來的方法

var useO=new o();document.write(useO.toJsonString().join(","));

第二種圖解理解為:

 

該方式屬于類o上一層的聚合。

更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三| 日韩a**站在线观看| 国产91九色视频| 国产精品亚洲综合天堂夜夜| 欧美色播在线播放| 日韩av在线网址| 国产亚洲精品久久久久久| 国产精品日韩在线| 亚洲男人天天操| 久久亚洲精品成人| 日韩av手机在线看| 91嫩草在线视频| 精品中文字幕久久久久久| 91在线观看免费观看| 成人伊人精品色xxxx视频| 国产a∨精品一区二区三区不卡| 国产精品一区二区三区毛片淫片| 欧美激情区在线播放| 91九色综合久久| 国产成人精品在线观看| 欧美精品情趣视频| 日韩免费观看av| 精品国偷自产在线视频99| 性金发美女69hd大尺寸| 成人精品网站在线观看| 日韩av电影院| 日韩高清免费观看| 色综合色综合网色综合| 国产精品一二三视频| 97视频在线观看免费高清完整版在线观看| 国产成人激情小视频| 久久影视三级福利片| 欧美午夜激情视频| 欧美亚洲另类视频| 国产美女精品视频免费观看| 欧美黄色性视频| 91美女福利视频高清| 欧美日韩亚洲系列| 国内伊人久久久久久网站视频| 亚洲免费视频一区二区| 欧美激情视频在线| 欧美成人激情视频| 91精品国产91久久久久福利| 亚洲欧美日韩精品久久奇米色影视| 久久久91精品国产| 欧美大片大片在线播放| 久久久久久久久久久av| 国产精品白嫩美女在线观看| 亚洲国产精品高清久久久| 最新国产成人av网站网址麻豆| 久久视频在线免费观看| 日韩高清欧美高清| 日韩电影免费在线观看| 中文一区二区视频| 成人免费福利视频| 九九精品视频在线观看| 国产日韩视频在线观看| 久久九九有精品国产23| 国产精品日韩电影| 亚洲女性裸体视频| 国产精品海角社区在线观看| 亚洲网在线观看| 亚洲一区精品电影| 欧美精品久久久久| 国产主播喷水一区二区| 国产999精品久久久| 亚洲天堂一区二区三区| 成人在线视频福利| 亚洲成人久久一区| 欧美性xxxx极品hd欧美风情| 久久久亚洲欧洲日产国码aⅴ| 成人免费福利在线| 91精品美女在线| 国产成一区二区| 黄色成人av在线| 性欧美xxxx交| 欧美劲爆第一页| 久久精品99久久久久久久久| 在线观看欧美视频| 九九九热精品免费视频观看网站| 久久综合伊人77777蜜臀| 亚洲国产精品va在线| 成人激情视频免费在线| 欧美性在线视频| 91中文精品字幕在线视频| 日韩中文在线不卡| 欧美国产乱视频| 国产午夜精品理论片a级探花| 欧美性xxxx| 日韩在线高清视频| 91亚洲午夜在线| 中国人与牲禽动交精品| 最近中文字幕2019免费| 亚洲视频一区二区三区| www亚洲精品| 成人国产精品色哟哟| 亚洲免费中文字幕| 日韩视频欧美视频| 深夜福利亚洲导航| 久久免费视频在线观看| 欧洲日本亚洲国产区| 亚洲一区二区三区xxx视频| 国产成人欧美在线观看| 亚洲精品美女网站| 国产大片精品免费永久看nba| 日韩av综合网| 亚洲精品国产综合区久久久久久久| 久久精品人人爽| 在线电影欧美日韩一区二区私密| 精品性高朝久久久久久久| 日韩美女在线观看| 欧美专区中文字幕| 亚洲理论电影网| 777精品视频| 欧美亚洲国产日韩2020| 91中文字幕在线观看| 91国语精品自产拍在线观看性色| 日韩精品中文字幕视频在线| 欧美成人精品xxx| 国产精品久久久av| 萌白酱国产一区二区| 91精品国产自产在线观看永久| 日本不卡视频在线播放| 国产精品稀缺呦系列在线| 国产欧美一区二区三区视频| 不用播放器成人网| 亚洲国产精品系列| 国产精品美乳一区二区免费| 91精品国产自产91精品| 亚洲国产精品va在线观看黑人| 国产精品ⅴa在线观看h| 亚洲欧美综合区自拍另类| 久久成人av网站| 91久久国产精品91久久性色| 91超碰caoporn97人人| 欧美高清电影在线看| 亚洲香蕉av在线一区二区三区| 亚洲综合一区二区不卡| 久久亚洲精品成人| 日韩高清电影好看的电视剧电影| 国产成人黄色av| 国产精品成人一区| 亚洲精品www久久久久久广东| 亚洲色图25p| 中文字幕av一区| 亚洲日本中文字幕免费在线不卡| 国产精品久在线观看| 日韩av片永久免费网站| 亚洲女人初尝黑人巨大| 欧美裸体xxxxx| 性色av一区二区咪爱| 欧美激情图片区| 国产精品久久精品| 久久在精品线影院精品国产| 日韩免费电影在线观看| 色妞一区二区三区| 欧美成人三级视频网站| 精品国偷自产在线| 日韩极品精品视频免费观看| 国产成人精品免高潮在线观看| 美日韩精品视频免费看| 亚洲电影免费观看高清完整版| 欧美性生交大片免网| 国产精品成人一区二区三区吃奶|