this_原型鏈_繼承

this部分

原型鏈相關(guān)問題
問題7:有如下代碼课舍,解釋Person塌西、 prototype、proto布卡、p雨让、constructor之間的關(guān)聯(lián)。

function Person(name){ 
  this.name = name;
}
Person.prototype.sayName = function(){ 
  console.log('My name is :' + this.name);
}
var p = new Person("若愚")
p.sayName();

person是構(gòu)造函數(shù)忿等;
prototype是構(gòu)造函數(shù)的原型對(duì)象;
p是構(gòu)造函數(shù)的實(shí)例崔挖;
__proto__p的原型鏈贸街,指向personprototype
constructor即構(gòu)造函數(shù)person本身狸相。

問題8: 上例中薛匪,對(duì)對(duì)象 p可以這樣調(diào)用 p.toString()蝌焚。toString是哪里來的? 畫出原型圖?并解釋什么是原型鏈掖蛤。

原型鏈 (4).png
  • toString是哪里來的?
    p首先會(huì)找自己的toString方法,如果未找到就會(huì)通過__proto__pcrsonprototype上尋找素标,如果未找到瘸右,就會(huì)繼續(xù)通過prototype__proto__object.prototype上尋找娇跟,結(jié)果會(huì)找到toString方法。
  • 解釋什么是原型鏈
    JS在創(chuàng)建對(duì)象(不論是普通對(duì)象還是函數(shù)對(duì)象)的時(shí)候太颤,都有一個(gè)叫做__proto__的內(nèi)置屬性苞俘,用于指向創(chuàng)建它的函數(shù)對(duì)象的原型對(duì)象prototype。在訪問一個(gè)對(duì)象屬性的時(shí)候龄章,如果對(duì)象本身沒有找到這個(gè)屬性吃谣,就會(huì)沿著原型鏈一層一層的尋找乞封。

問題9:對(duì)String做擴(kuò)展,實(shí)現(xiàn)如下方式獲取字符串中頻率最高的字符

String.prototype.getMostOften = function (){
  var obj = {};
  for(var i=0;i<this.length;i++){
    var k = this[i];
    if(!obj[k]){
      obj[k] = 1;第一次出現(xiàn) 次數(shù)記為1
    }else{
      obj[k]++;// 如果存在次數(shù)再加1
    }
  }
  console.log(obj);
//遍歷對(duì)象岗憋,找到出現(xiàn)次數(shù)最多的
  var max = 0,val;
  for(var key in obj){
    if(obj[key] > max){

      max = obj[key];
      val = key;
    }
  }
  return ('因?yàn)?+val+'出現(xiàn)了'+max+'次');
}
var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因?yàn)閐 出現(xiàn)了5次
Paste_Image.png

問題10: instanceOf有什么作用肃晚?內(nèi)部邏輯是如何實(shí)現(xiàn)的?

  • instanceOf:判斷一個(gè)對(duì)象是否為另一個(gè)對(duì)象的實(shí)例仔戈。繼承中判斷實(shí)例是否屬于它的父類
Paste_Image.png
Paste_Image.png

繼承相關(guān)問題
問題11:繼承有什么作用?

  • 在訪問對(duì)象上的一個(gè)屬性時(shí)关串,他會(huì)在原型鏈上尋找該屬性,一直找到原型鏈的末端杂穷,所以我們?cè)谠玩溕咸砑拥姆椒ê凡瑢?shí)例可以使用,也就是繼承耐量。
  • 繼承可以減少重復(fù)的代碼飞蚓。比如父類已經(jīng)提供的方法,子類可以直接使用廊蜒,不必再去實(shí)現(xiàn)趴拧。

問題12: 下面兩種寫法有什么區(qū)別?

//方法1
function People(name, sex){
    this.name = name;
    this.sex = sex;
    this.printName = function(){
        console.log(this.name);
    }
}
var p1 = new People('饑人谷', 2)

//方法2
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}

Person.prototype.printName = function(){
    console.log(this.name);
}
var p1 = new Person('若愚', 27);

方法一是在People函數(shù)內(nèi)部創(chuàng)建printName方法,當(dāng)再創(chuàng)建一個(gè)People時(shí)山叮,printName方法又會(huì)被創(chuàng)建一次著榴,所以比較消耗內(nèi)存。

方法二的printName方法是放在Person的原型上屁倔,當(dāng)需要使用的時(shí)候調(diào)用就可以了脑又,不需要重復(fù)創(chuàng)建printName方法。

問題13: Object.create 有什么作用锐借?兼容性如何问麸?

  • Object.create() 方法創(chuàng)建一個(gè)擁有指定原型和若干個(gè)指定屬性的對(duì)象。
function Person(name){
   this.name = name;
}
Person.prototype.sayName = function(){
     console.log('My name is :' + this.name);
}
function People(name){
  this.name = name;
}
People.prototype = Object.create(Person.prototype);
People.prototype.constructor = People;
var p = new People('若愚');
p.sayName();
Paste_Image.png
  • 通過Object.create()方法钞翔,讓People.prototype指向Person.prototype繼承它的printName方法严卖。
  • 對(duì)People.prototype進(jìn)行修改不會(huì)影響到原來Person.prototypeprintName方法。
  • 兼容性:
瀏覽器兼容.png

問題14: hasOwnProperty有什么作用布轿? 如何使用哮笆?
hasOwnProperty() 方法會(huì)返回一個(gè)布爾值,其用來判斷某個(gè)對(duì)象是否含有指定的屬性汰扭,該方法會(huì)忽略掉那些從原型鏈上繼承到的屬性稠肘。

Paste_Image.png

問題15:如下代碼中call的作用是什么?

function Person(name, sex){
  this.name = name;
  this.sex = sex;
}
function Male(name, sex, age){
  Person.call(this, name, sex);    //這里的 call 有什么作用
  this.age = age;
}

Male下執(zhí)行Person環(huán)境,Male繼承了Person的功能东且。

問題16: 補(bǔ)全代碼启具,實(shí)現(xiàn)繼承

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

Person.prototype.getName = function(){
    console.log(this.name);
};
Person.prototype.printName = function(){
    console.log(this.name);
};

function Male(name, sex, age){
    Person.call(this,name,sex);
    this.age = age;
}
Male.prototype = Object.create(Person.prototype); //ES5的方法
Male.prototype.constructor = Male;

Male.prototype.getAge = function(){
    console.log(this.name);
};

var ruoyu = new Male('若愚', '男', 27);
ruoyu.printName();

方法二:

function fn () {}
fn.prototype = Person.prototype
Male.prototype = new fn()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市珊泳,隨后出現(xiàn)的幾起案子鲁冯,更是在濱河造成了極大的恐慌拷沸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薯演,死亡現(xiàn)場離奇詭異撞芍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跨扮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門序无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衡创,你說我怎么就攤上這事帝嗡。” “怎么了璃氢?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵哟玷,是天一觀的道長。 經(jīng)常有香客問我一也,道長巢寡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任椰苟,我火速辦了婚禮抑月,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舆蝴。我一直安慰自己谦絮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布洁仗。 她就那樣靜靜地躺著挨稿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪京痢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天篷店,我揣著相機(jī)與錄音祭椰,去河邊找鬼。 笑死疲陕,一個(gè)胖子當(dāng)著我的面吹牛方淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹄殃,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼携茂,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了诅岩?” 一聲冷哼從身側(cè)響起讳苦,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤带膜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鸳谜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膝藕,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年咐扭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芭挽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝗肪,死狀恐怖袜爪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薛闪,我是刑警寧澤辛馆,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站逛绵,受9級(jí)特大地震影響怀各,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜术浪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一瓢对、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胰苏,春花似錦硕蛹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倔毙,卻和暖如春埃仪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陕赃。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工卵蛉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人么库。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓傻丝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诉儒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葡缰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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