JS的面向?qū)ο蟮木幊趟枷?-構(gòu)造函數(shù)的繼承(阮一峰)

在開發(fā)中:有可能構(gòu)造函數(shù)B要是用構(gòu)造函數(shù)A中的一些方法和屬性规哲。這個時候要使用繼承來拓展B

//創(chuàng)建一個構(gòu)造函數(shù)Obj
function Obj(){
    this.country="中國";
    this.state="廣東"
}

//創(chuàng)建一個人的構(gòu)造函數(shù)
function Person(name,age,sex){
    this.name=name;
    this.age=age;
    this.sex=sex;
}

1:使用 call apply來實現(xiàn)

//    function Person1(name,age,sex){
//    Obj.call(this,arguments) //在這個Person的構(gòu)造函數(shù)中添加這一段代碼 這里有一個疑問是arguments
      不寫的話也可以使用忱反,但是我這里創(chuàng)建的時候如果想修改 Obj里面的屬性怎么辦钠乏?比如我想修改一個國  
      家為加拿大的?
//     this.name=name;
//     this.age=age;
//     this.sex=sex;
//    }
//    var oneman=new Person1('韓梅',20,'女');
//    console.log(oneman); //Person1 {country: "中國", state: "廣東", name: "韓梅", age: 20, sex: "女"}

2:改寫prototype的指向

//    Person.prototype=new Obj(); //這里把Person這個構(gòu)造函數(shù)的原型指向了一個Obj的實例吵血。(復(fù)雜數(shù)據(jù)
      類型:內(nèi)存上的指針改變)Person上就帶有了Obj的屬性和方                                  法,但這個時候我
      們要是new Person就相當(dāng)與new Obj 沒有name age sex這些屬性
//    Person.prototype.constructor=Person;
//    var aa=new Person('李磊',30,'男');
//    console.log(aa); //Person {name: "李磊", age: 30, sex: "男"} 發(fā)現(xiàn)在屬性上并沒有 country和state
//    console.log(aa.state); // 廣東  但是能打印出來。也就是說他是存在的~但是存在在原型鏈上坦弟,不暴露在
      外面

3.接下來阮一峰又給了一個坑~

//從性能上來考慮country和state在Person上并不要求他做修改。那么也就不需要創(chuàng)建Obj的實例消耗內(nèi)存官地,
   把它放到原型鏈上就可以
//    function Obj(){};
//    Obj.prototype.country="中國";
//    Obj.prototype.state="廣東";
//    console.log(Obj.prototype.constructor);
//    Person.prototype=Obj.prototype;
//    console.log(Person.prototype.constructor);
//    Person.prototype.constructor=Person;   //這里改變了原型的構(gòu)造函數(shù)指向酿傍,重新指向了Person
//    var bb=new Person('趙洋',30,'男的');
//    console.log(bb);
//    console.log(Obj.prototype.constructor); //function Person(name,age,sex){}  為什么Obj的構(gòu)造函數(shù)成了Person? 
答案:因為在復(fù)雜數(shù)據(jù)類型中 他們指向了同一個內(nèi)存地址驱入,Person重新設(shè)定constroctor后 同一個內(nèi)存地址的Obj.prototypr也發(fā)生了改變赤炒。 生活中的例子是這兩個人合租在一個房間里面,A改變了房間內(nèi)的布局亏较,B回來的時候看到的還是原來的房間布局么莺褒??雪情?

4.利用空對象做為容器遵岩、橋梁

function Objj(){ }
Objj.prototype.country="中國";
Objj.prototype.state="廣東";
//    var F = function(){};
//    F.prototype = Objj.prototype;
//    Person.prototype = new F();
//    Person.prototype.constructor = Person;

//    console.log(Objj.prototype.constructor); // function Objj(){ }
//    var aaa=new Person('ni',50,'boy')
//    console.log(aaa.country);
//上面這段代碼的核心在于 如何讓兩個prototype不指向通一個內(nèi)存地址。那我們就在內(nèi)存里面開辟一個新的地址來作為中轉(zhuǎn)站巡通,不影響其他地址尘执。結(jié)果就是創(chuàng)建一個實例,因為實例對象開辟了新的內(nèi)存地址 相當(dāng)于第2個方法     下面開始把上面的代碼封裝一下
function extend (Child,Parent){
    var F=function(){};
    F.prototype=Parent.prototype;
    Child.prototype=new F();
    Child.prototype.constructor=Child;
    Child.uber=Parent.prototype; //保存父級原型鏈上的屬性和方法 以便與后期在Child中進(jìn)行操作
}

//5.拷貝繼承 也就是遍歷以后重新賦值
function entend2(Child,Parent){
    var a=Child.prototype;
    var b=Parent.prototype;
    for(var i in b){
        a[i]=b[i]
    }
}
//如果Child的原型鏈上有和Parent原型鏈上相同的屬性或者方法 會被Parent給替換掉
Person.prototype.state='正確';
entend2(Person,Objj);
var ccc=new Person('報告大王',100,'妖精');
console.log(ccc.state);  //廣東
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宴凉,一起剝皮案震驚了整個濱河市誊锭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弥锄,老刑警劉巖丧靡,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異籽暇,居然都是意外死亡温治,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門图仓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罐盔,“玉大人,你說我怎么就攤上這事救崔』炭矗” “怎么了捏顺?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纬黎。 經(jīng)常有香客問我幅骄,道長,這世上最難降的妖魔是什么本今? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任拆座,我火速辦了婚禮,結(jié)果婚禮上冠息,老公的妹妹穿的比我還像新娘挪凑。我一直安慰自己,他們只是感情好逛艰,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布躏碳。 她就那樣靜靜地躺著,像睡著了一般散怖。 火紅的嫁衣襯著肌膚如雪菇绵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天镇眷,我揣著相機(jī)與錄音咬最,去河邊找鬼。 笑死欠动,一個胖子當(dāng)著我的面吹牛永乌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翁垂,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼铆遭,長吁一口氣:“原來是場噩夢啊……” “哼硝桩!你這毒婦竟也來了沿猜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤碗脊,失蹤者是張志新(化名)和其女友劉穎啼肩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衙伶,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祈坠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矢劲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赦拘。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芬沉,靈堂內(nèi)的尸體忽然破棺而出躺同,到底是詐尸還是另有隱情阁猜,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布蹋艺,位于F島的核電站剃袍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捎谨。R本人自食惡果不足惜民效,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涛救。 院中可真熱鬧畏邢,春花似錦、人聲如沸检吆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咧栗。三九已至逆甜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間致板,已是汗流浹背交煞。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留斟或,地道東北人素征。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像萝挤,于是被迫代替她去往敵國和親御毅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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