高級2-this_原型鏈_繼承

作業(yè)

this 相關(guān)問題

  • 問題1: apply、call 有什么作用维雇,什么區(qū)別

    • apply()和call()函數(shù)都可以 指定this值和參數(shù)值的情況下調(diào)用某個函數(shù)。
    • call()和apply()的作用一樣哪廓,區(qū)別在于提供給原函數(shù)的參數(shù)的方式不一樣.
      • pply()函數(shù)只接受兩個參數(shù)为肮,提供給原函數(shù)的參數(shù)以數(shù)組或類數(shù)組對象的形式存在.
      • 而call()接收無限個參數(shù)叉钥, 第二個參數(shù)及其后面的參數(shù)就是提供給原函數(shù)的參數(shù)。
  • 問題2: 以下代碼輸出什么?

var john = {
firstName: "John"
}
function func() {
alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi()//彈出john:hi篙贸!
//因為func賦給了john對象的sayHi屬性沼侣,執(zhí)行john.sayHi() 時 是在john對象上調(diào)用的,此時的上下文this是john了.

* 問題3: 下面代碼輸出什么歉秫,為什么?

    ```
func() //彈出window ,因為此時函數(shù)里的this歸根結(jié)底是window調(diào)用的
function func() { 
  alert(this)
}
  • 問題4:下面代碼輸出什么

document.addEventListener('click', function(e){
console.log(this);//會打印document 因為這個屬于綁定事件類型养铸,此時的this指的是事件源DOM對象
setTimeout(function(){
console.log(this);//setTimeout及setInterval里的this均指window
}, 200);
}, false);

* 問題5:下面代碼輸出什么雁芙,why

    ```
var john = { 
  firstName: "John" 
}
function func() { 
  alert( this.firstName )
}
func.call(john)//彈出John,因call(john)就是把函數(shù)執(zhí)行的上下文及參數(shù)John傳給func函數(shù)。此時firstName: "John"钞螟,所以this.firstName肯定是“John”了兔甘。
  • 問題6: 以下代碼有什么問題,如何修改

var module= {
bind: function(){
$btn.on('click', function(){
console.log(this) //this指的是$btn源DOM對象
this.showMsg();//此處應(yīng)該改為module.showMsg()鳞滨,不改的話它會在$btn源DOM對象找showMsg().會導致this.showMsg is not a function 報錯
})
},

showMsg: function(){
console.log('饑人谷');
}
}


##原型鏈相關(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();
//p是Person的實例唁情,所以繼承Person原型鏈上的屬性和方法。
//關(guān)聯(lián):
    Person.prototype.constructor == Person,
    Person.prototype == p.__proto__,
    p.__proto__.constructor == Person,
    Person.prototype.__proto__ == Object.prototype,
    Object.prototype.constructor == Object,
    Object.prototype.__proto__ == null
  • 問題8: 上例中甫匹,對對象 p可以這樣調(diào)用 p.toString()甸鸟。toString是哪里來的? 畫出原型圖?并解釋什么是原型鏈。
    答:構(gòu)造函數(shù)的原型自帶一個指針指向object的原型兵迅,因而toString是從object的原型里繼承而來抢韭。

    Paste_Image.png

    原型鏈:JS在創(chuàng)建對象(不論是普通對象還是函數(shù)對象)的時候,都有一個叫做proto的內(nèi)置屬性恍箭,用于指向創(chuàng)建它的函數(shù)對象的原型對象prototype刻恭。在訪問一個對象屬性的時候,如果對象本身沒有找到這個屬性季惯,就會沿著原型鏈一層一層的尋找吠各。

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

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

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

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

return key;

}

* 問題10: instanceOf有什么作用勉抓?內(nèi)部邏輯是如何實現(xiàn)的贾漏? 
答:
作用是確認instanceOf前面的對象是否是后面的對象的實例;![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2858982-ad8795604b45cd13.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



##繼承相關(guān)問題
* 問題11:繼承有什么作用?
答:
繼承使不同的實例可以共享構(gòu)造函數(shù)的原型對象的屬性和方法藕筋,以提高代碼的復用性纵散;

* 問題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);
//printName:一個寫在構(gòu)造函數(shù)內(nèi)部的實例對象上。另一個寫在構(gòu)建函數(shù)的prototype對象上。
//前者在每生成一個實例之后實例的printName就新占用內(nèi)存伍掀。
//后者每生成一個實例后會共享構(gòu)造函數(shù)prototype對象上的printName方法掰茶,以達到節(jié)省內(nèi)存的效果;
  • 問題13: Object.create 有什么作用蜜笤?兼容性如何濒蒋?
    答:
    • Object.create()是ES5提出的一個新的方法,它可以傳入一個對象作為該方法返回的對象的原型對象把兔;

    • 兼容性:各大瀏覽器的最新版本(包括IE9)都兼容了這個方法沪伙。如果遇到老式瀏覽器,可以用下面的代碼兼容:

if(!Object.create){
Object.create = function(obj){
function F(){};
F.prototype = obj;
return new F();
}
}



* 問題14: hasOwnProperty有什么作用县好? 如何使用围橡?
答:
對象實例的hasOwnProperty方法返回一個布爾值,用于判斷某個屬性定義在對象自身缕贡,還是定義在原型鏈上翁授。

var people = {
name:'teren'
}
people.hasOwnProperty('name')//true
people.hasOwnProperty('toString')//false
Object.getPrototypeOf(people).hasOwnProperty('toString')//true


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

    ```
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}
function Male(name, sex, age){
    Person.call(this, name, sex);    //這里的 call 有什么作用
    ////構(gòu)造函數(shù)Person在構(gòu)造函數(shù)Male作用域下執(zhí)行,以實現(xiàn)構(gòu)造函數(shù)的繼承晾咪;
    this.age = age;
}
  • 問題16: 補全代碼收擦,實現(xiàn)繼承

function Person(name, sex){
this.name = name;
this.sex = sex;
}
Person.prototype.getName = function(){
return 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(){
return this.age
};
Male.prototype.getAge = function(){
console.log(this.name)
};
var ruoyu = new Male('若愚', '男', 27);
ruoyu.printName();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市禀酱,隨后出現(xiàn)的幾起案子炬守,更是在濱河造成了極大的恐慌,老刑警劉巖剂跟,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件减途,死亡現(xiàn)場離奇詭異,居然都是意外死亡曹洽,警方通過查閱死者的電腦和手機鳍置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來送淆,“玉大人税产,你說我怎么就攤上這事⊥当溃” “怎么了辟拷?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阐斜。 經(jīng)常有香客問我衫冻,道長,這世上最難降的妖魔是什么谒出? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任隅俘,我火速辦了婚禮邻奠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘为居。我一直安慰自己碌宴,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布蒙畴。 她就那樣靜靜地躺著贰镣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膳凝。 梳的紋絲不亂的頭發(fā)上八孝,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音鸠项,去河邊找鬼。 笑死子姜,一個胖子當著我的面吹牛祟绊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哥捕,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼牧抽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遥赚?” 一聲冷哼從身側(cè)響起扬舒,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凫佛,沒想到半個月后讲坎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡愧薛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年晨炕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毫炉。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓮栗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞄勾,到底是詐尸還是另有隱情费奸,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布进陡,位于F島的核電站愿阐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏四濒。R本人自食惡果不足惜换况,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一职辨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戈二,春花似錦舒裤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鲜滩,卻和暖如春伴鳖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徙硅。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工榜聂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗓蘑。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓须肆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桩皿。 傳聞我的和親對象是個殘疾皇子豌汇,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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

  • this 相關(guān)問題 問題1: apply、call 有什么作用泄隔,什么區(qū)別 Javascript的每個Functio...
    Maggie_77閱讀 595評論 0 0
  • this 相關(guān)問題 1: apply拒贱、call 、bind有什么作用佛嬉,什么區(qū)別 call apply逻澳,調(diào)用一個函數(shù)...
    曉風殘月1994閱讀 294評論 0 0
  • this相關(guān)問題 問題1:apply、call有什么作用暖呕,什么區(qū)別 apply()和call()函數(shù)都可以 指定t...
    ReedSun_QD閱讀 336評論 0 0
  • 1. apply赡盘、call 、bind有什么作用缰揪,什么區(qū)別森瘪? call ,apply的作用:調(diào)用一個函數(shù)抖格,傳入函數(shù)...
    Rising_suns閱讀 395評論 0 0
  • this 相關(guān)問題 問題1: apply辆飘、call 耘成、bind有什么作用,什么區(qū)別 call apply艳狐,調(diào)用一個...
    饑人谷_嚴琰閱讀 240評論 0 0