this_原型鏈_繼承

1.apply替废、call 箍铭、bind有什么作用,什么區(qū)別

  • bind:返回一個新函數(shù)椎镣,并且使函數(shù)內(nèi)部的this為傳入的第一個參數(shù)
  • call:調(diào)用一個函數(shù)诈火,傳入函數(shù)執(zhí)行上下文及參數(shù)
  • apply:調(diào)用一個函數(shù),傳入函數(shù)執(zhí)行上下文及參數(shù)列表

2. 以下代碼輸出什么?

var john = { 
  firstName: "John" 
}
function func() { 
  alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi()         //John: hi!

3.下面代碼輸出什么状答,為什么

func() 
function func() { 
  alert(this) //window
}

因為在全局作用域下的this為window

4.下面代碼輸出什么

document.addEventListener('click', function(e){
    console.log(this);          //document
    setTimeout(function(){
        console.log(this);              //window
    }, 200);
}, false);

5.下面代碼輸出什么冷守,why

var john = { 
  firstName: "John" 
}

function func() { 
  alert( this.firstName )
}
func.call(john)  //John

6.以下代碼有什么問題,如何修改

var module= {
  bind: function(){
    $btn.on('click', function(){
      console.log(this) //this指什么: $btn
      this.showMsg();
    }.bind(this))  //修改點
  },
  
  showMsg: function(){
    console.log('饑人谷');
  }
}

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ù)內(nèi)部定義了實例的屬性和方法,這些屬性和方法是屬于該類的所有實例的特征淮菠;
  • p是通過構(gòu)造函數(shù)Person構(gòu)造出來的實例男公,也是擁有proto屬性。所以p.proto === Person.prototype;
  • prototype是構(gòu)造函數(shù)內(nèi)部的原型對象合陵,所以擁有contructor和proto屬性枢赔,其中contructor屬性指向構(gòu)造函數(shù)Person,proto指向該對象的原型拥知,即
Person.prototype.__proto__ === Object.prototype;
Person.prototype.constructor == Person

8.上例中踏拜,對對象 p可以這樣調(diào)用 p.toString()。toString是哪里來的? 畫出原型圖?并解釋什么是原型鏈低剔。

  • p.toString()方法是繼承構(gòu)造函數(shù)Object的原型對象里定義的toString方法速梗,首先p會找自己的toString方法,如果沒有找到襟齿,會沿著proto屬性繼續(xù)到構(gòu)造函數(shù)Person的prototype里找toString方法姻锁,如果還未找到,再繼續(xù)往Person.prototype的proto即Object.prototype找toString方法猜欺,最后找到toString()方法位隶。

  • 原型鏈:由于原型對象本身也是對象,而每個javascript對象都有一個原型對象替梨,每個對象都有一個隱藏的proto屬性钓试,原型對象也有自己的原型,而它自己的原型對象又可以有自己的原型副瀑,這樣就組成了一條鏈弓熏,這個就是原型鏈。在訪問對象的屬性時糠睡,如果在對象本身中沒有找到挽鞠,則會去原型鏈中查找,如果找到狈孔,直接返回值信认,如果整個鏈都遍歷且沒有找到屬性,則返回undefined均抽。原型鏈一般實現(xiàn)為一個鏈表嫁赏,這樣就可以按照一定的順序來查找。

Paste_Image.png

9.對String做擴(kuò)展油挥,實現(xiàn)如下方式獲取字符串中頻率最高的字符

String.prototype.getMostOften = function(){
  var obj = {};
  var k = 0;
  for (var i=0; i < this.length; i++) {
    k = this[i];
    if(obj[k]) {
      obj[k]++;
    }else {
      obj[k] = 1;
    }
  }

  var max = 0;
  var key = 0;
  for(var k in obj) {
    if(obj[k] > max) {
      max = obj[k];
      key = k;
    }
  }

  return key;
}


var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因為d 出現(xiàn)了5次

10.instanceOf有什么作用潦蝇?內(nèi)部邏輯是如何實現(xiàn)的款熬?

  • instanceOf:判斷一個對象是否為另一個對象的實例
function instanceOf(obj,fn){
  var oldpro = obj.__proto__;
  while(oldpro){
    if(oldpro === fn.prototype){
        return true;
    }else{
        oldpro = oldpro.__proto__;
    }
  }
  return false;
}

11.繼承有什么作用?

  • 繼承是指一個對象直接使用另一個對象的屬性和方法。
  • 繼承劃分了類的層次性攘乒,父類代表的是更一般贤牛、更泛化的類,而子類則是更為具體则酝、更為細(xì)化殉簸;繼承是實現(xiàn)代碼重用、擴(kuò)展軟件功能的重要手段沽讹,子類中與父類完全相同的屬性和方法不必重寫般卑,只需寫出新增或改寫的內(nèi)容,這就是說子類可以復(fù)用父類的內(nèi)容爽雄,不必一切從零開始椭微。

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);

區(qū)別:同樣都是創(chuàng)建printName方法,方法1的printName方法是在函數(shù)Person實例對象里的盲链,方法2是在Person的prototype對象上的。當(dāng)再創(chuàng)建一個Person實例對象的時候迟杂,方法1又將會再創(chuàng)建一個printName方法刽沾,占用新的內(nèi)存,而方法2將一個公用的printName方法寫在原型上排拷,當(dāng)對象要使用該方法只需到原型鏈里調(diào)用就可以了侧漓,達(dá)到節(jié)省內(nèi)存的效果。

13. Object.create 有什么作用监氢?兼容性如何布蔗?

  • 作用:創(chuàng)建一個擁有指定原型和若干個指定屬性的對象。
  • 兼容性:


    Paste_Image.png

14.hasOwnProperty有什么作用浪腐? 如何使用纵揍?

  • 作用:判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性,是JavaScript中唯一一個處理屬性但是不查找原型鏈的函數(shù)
  • 語法:obj.hasOwnProperty(prop)(prop為要檢測的屬性名稱)

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函數(shù)中议街,調(diào)用Person函數(shù)泽谨,使Male函數(shù)能夠執(zhí)行Person上的初始化代碼,實現(xiàn)構(gòu)造函數(shù)繼承特漩。

16.補全代碼吧雹,實現(xiàn)繼承

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

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

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

Male.prototype = Object.create(Person.prototype);
Male.prototype.constructor = Male;
Male.prototype.getAge = function(){
    console.log(this.age);
};

var ruoyu = new Male('若愚', '男', 27);
ruoyu.getName();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涂身,隨后出現(xiàn)的幾起案子雄卷,更是在濱河造成了極大的恐慌,老刑警劉巖蛤售,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丁鹉,死亡現(xiàn)場離奇詭異妒潭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鳄炉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門杜耙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拂盯,你說我怎么就攤上這事佑女。” “怎么了谈竿?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵团驱,是天一觀的道長。 經(jīng)常有香客問我空凸,道長嚎花,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任呀洲,我火速辦了婚禮紊选,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘道逗。我一直安慰自己兵罢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布滓窍。 她就那樣靜靜地躺著卖词,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吏夯。 梳的紋絲不亂的頭發(fā)上此蜈,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音噪生,去河邊找鬼裆赵。 笑死,一個胖子當(dāng)著我的面吹牛跺嗽,可吹牛的內(nèi)容都是我干的顾瞪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼抛蚁,長吁一口氣:“原來是場噩夢啊……” “哼陈醒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞧甩,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤钉跷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肚逸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爷辙,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡彬坏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膝晾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栓始。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖血当,靈堂內(nèi)的尸體忽然破棺而出幻赚,到底是詐尸還是另有隱情,我是刑警寧澤臊旭,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布落恼,位于F島的核電站,受9級特大地震影響离熏,放射性物質(zhì)發(fā)生泄漏佳谦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一滋戳、第九天 我趴在偏房一處隱蔽的房頂上張望钻蔑。 院中可真熱鬧,春花似錦奸鸯、人聲如沸矢棚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蘑拯,卻和暖如春钝满,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背申窘。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工弯蚜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剃法。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓碎捺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贷洲。 傳聞我的和親對象是個殘疾皇子收厨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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