關(guān)于函數(shù)的繼承

???<script type="text/javascript">

????????????//父級函數(shù)Box


????????????function Box(name,age,home){

????????????????//實(shí)例屬性

????????????????this.name=name;

????????????????this.age=age;

????????????????this.home=home;

????????????????//實(shí)例方法

????????????????this.say = function(){

????????????????????return this.home+" "+"繼承調(diào)用Box中的實(shí)例方法";

????????????????}

????????????}

????????????//Box的原型對象方法

????????????Box.prototype.run = function(){

????????????????console.log(this.name + "回家了");

????????????????//return this.name + "回家了";

????????????}

????????????//實(shí)例對象


????????????var b = new Box("tom",17,"北京");

????????????console.log(b);//box?{name: "tom", age: 17, home: "北京"}

????????????console.log(b.say());//繼承調(diào)用Box中的實(shí)例方法

????????????b.run();//tom回家了

????????????//console.log(b.run());//tom回家了


//-----------------繼承方式一:通過改變父類的執(zhí)行環(huán)境-------------------------------------------------------------

????????????//子集函數(shù)

????????????function Pox(name,age,home){

????????????????this.parent = Box;//將父級Box的代碼賦予子集中的一個(gè)屬性this.parent抠藕,相當(dāng)于Pox有了Box里的屬性和方法

????????????????this.parent("tom",17,"北京");//將實(shí)參傳遞到Box里面似舵,然后執(zhí)行其功能

????????????????delete this.parent;//在Pox函數(shù)中,刪除this.parent,保留Box的代碼

????????????}

????????????var p = new Pox();

????????????//p.run();//p.run is not a function 不能繼承父級原型對象下的方法,

????????????console.log(p);//Pox?{name: "tom", age: 17, home: "北京"}

????????????console.log(p.name);//tom

????????????console.log(p.home);//北京

????????????console.log(p.say());//繼承調(diào)用Box中的實(shí)例方法


//-----------------繼承方式二横辆,通過call繼承---缺點(diǎn):不能繼承調(diào)用父類原型對象方法--------------------------------------------------------------------------

????????????//子集函數(shù)

????????????function Cox(name,age,home,adress){

????????????????Box.call(this,name,age,home,adress);//this是為了改變父級中實(shí)例屬性的指向,讓其指向子集

????????????????this.adress = adress;

????????????}

????????????var c = new Cox("tom",17,"北京","十八路二巷");

????????????console.log(c);//Cox?{name: "tom", age: 17, home: "北京", adress: "十八路二巷"}

????????????console.log(c.age);//17

????????????console.log(c.say());//繼承調(diào)用Box中的實(shí)例方法

????????????//c.run();//c.run is not a function? 不能繼承調(diào)用父類原型對象的方法


//-----------------繼承方式三咖摹,通過apply繼承---缺點(diǎn):不能繼承調(diào)用父類原型對象方法--------------------

????????????//子集函數(shù)

????????????function Fox(name,age,home,email){

????????????????this.email = email;

????????????????//this是為了改變父級中實(shí)例屬性的指向糠悯,讓其指向子集

????????????????Box.apply(this,[name,age,home,email]);//apply傳遞參數(shù)以數(shù)組的形式傳遞

????????????}

????????????var f = new Fox("tom",17,"北京","123@.com");

????????????console.log(f);//Fox?{email: "123@.com", name: "tom", age: 17, home: "北京"}

????????????console.log(f.name)//tom

????????????console.log(f.say());//繼承調(diào)用Box中的實(shí)例方法

????????????//f.run();//f.run is not a function 不能繼承調(diào)用父類原型對象方法


//-----------------繼承方式四--原型鏈繼承----------------------------------------------------------------------------?-???????????

????????????//原理:讓子類的原型對象指向父類的實(shí)例化對象

????????????function Tox(name,age,home){};

????????????Tox.prototype = new Box();//讓子類的原型對象指向父類的實(shí)例化對象

????????????var t = new Tox("tom",17,"北京");//子類傳參無法改變父類的屬性值


????????????console.log(t);//Tox?{}

????????????console.log(t.home);//undefined

????????????console.log(t.age);//undefind

????????????console.log(t.say());//繼承調(diào)用Box中的實(shí)例方法


????????????//原型鏈繼承 缺點(diǎn):

????????????//1.對象父類中通過傳參的實(shí)例屬性,在利用原型鏈方式繼承時(shí)盏道,子類無法通過傳參的方式改變父類的屬性值稍浆。

????????????//2.如果在父類中有引用類型的屬性,會被共享猜嘱,一個(gè)改動衅枫,全部改動。



//-----------------.繼承方式五--混合(組合)繼承(解決以上缺點(diǎn)問題)----------------------------------------

????????????//call或apply繼承方法+原型鏈繼承方法綜合


????????????function Mox(name,age,home){//call或apply繼承方法

????????????????Box.call(this,name,age,home);

????????????}

????????????Mox.prototype = new Box();//原型鏈繼承

????????????var m = new Mox("tom",17,"北京");

????????????console.log(m);//Mox?{name: "tom", age: 17, home: "北京", say: ?}

????????????console.log(m.home);//北京

????????????console.log(m.say());//繼承調(diào)用Box中的實(shí)例方法

????????????m.run();//tom回家了? 可以繼承調(diào)用父類原型對象方法


????????????//問題:

????????????//父類執(zhí)行了兩次

????????????//子類原型下多了一些多余的屬性和方法(原父類的實(shí)例屬性和方法)

//-----------------寄生組合繼承(解決混合繼承的問題)---------------------------------------------------------------

????????????//原理

????????????function Nox(name,age,home){

????????????????Box.apply(this,[name,age,home]);//this改變指向朗伶,使父類中的實(shí)例屬性和方法指向子類

????????????}

????????????//封裝一個(gè)函數(shù)

????????????//supType表示父類

????????????//subType表示子類

????????????function fn(supType,subType){

????????????????var proto = Object.create(supType.prototype);

????????????????//proto下有一個(gè)constructor弦撩,這個(gè)constructor原來指向父類supType

????????????????proto.constructor = subType;//將constructor的指向修改為supType

????????????????subType.prototype = proto;//將修改后的對象全部賦值給子類

????????????}

????????????//調(diào)用函數(shù)

????????????fn(Box,Nox);

????????????var n = new Nox("tom",17,"北京");

????????????console.log(n);//Nox?{name: "tom", age: 17, home: "北京", say: ?}

????????????console.log(n.age);//17


//-------------------ES6繼承--關(guān)鍵字:extends和super---------------------------------------------------------------

????????????class Father{

????????????????constructor(name,age,adress){//實(shí)例屬性寫在constructor里面

????????????????????this.name = name;

????????????????????this.age = age;

????????????????????this.adress = adress;

????????????????}

????????????????eat(){

????????????????????return this.adress + "在中國";

????????????????}

????????????}

????????????//Son繼承Father

????????????class Son extends Father{

????????????????constructor(name,age,adress,phone){//實(shí)例屬性寫在constructor里面

????????????????????super(name,age,adress);//繼承Father中constructor的屬性,繼承的屬性寫在super的括號內(nèi)

????????????????????//super(name,age);

????????????????????this.phone = phone;

????????????????}

????????????????fn(){

????????????????????return this.phone + "是我的電話號碼";

????????????????}

????????????}

????????????var sun = new Son("張三",50,"深圳","15727656869");

????????????console.log(sun);

????????????console.log(sun.name);//張三

????????????console.log(sun.fn());//15727656869是我的電話號碼

????????????console.log(sun.eat());//深圳在中國


????????</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末论皆,一起剝皮案震驚了整個(gè)濱河市益楼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌点晴,老刑警劉巖感凤,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粒督,居然都是意外死亡陪竿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門屠橄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萨惑,“玉大人,你說我怎么就攤上這事仇矾∮拱” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵贮匕,是天一觀的道長姐仅。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么掏膏? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任劳翰,我火速辦了婚禮,結(jié)果婚禮上馒疹,老公的妹妹穿的比我還像新娘佳簸。我一直安慰自己,他們只是感情好颖变,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布生均。 她就那樣靜靜地躺著,像睡著了一般腥刹。 火紅的嫁衣襯著肌膚如雪马胧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天衔峰,我揣著相機(jī)與錄音佩脊,去河邊找鬼。 笑死垫卤,一個(gè)胖子當(dāng)著我的面吹牛威彰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穴肘,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼抱冷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了梢褐?” 一聲冷哼從身側(cè)響起旺遮,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盈咳,沒想到半個(gè)月后耿眉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鱼响,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年鸣剪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丈积。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筐骇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出江滨,到底是詐尸還是另有隱情铛纬,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布唬滑,位于F島的核電站告唆,受9級特大地震影響棺弊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擒悬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一模她、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懂牧,春花似錦侈净、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拼弃,卻和暖如春夏伊,著一層夾襖步出監(jiān)牢的瞬間摇展,已是汗流浹背吻氧。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咏连,地道東北人盯孙。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像祟滴,于是被迫代替她去往敵國和親振惰。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容