this_原型鏈_繼承

this相關問題

問題1: apply秀撇、call 但汞、bind有什么作用免猾,什么區(qū)別

call() 方法調用一個函數(shù), 其具有一個指定的this值和分別地提供的參數(shù)(參數(shù)的列表)。apply()和call() 方法類似眉反,只有一個區(qū)別,就是call()方法接受的是若干個參數(shù)的列表穆役,而apply()方法接受的是一個包含多個參數(shù)的數(shù)組寸五。

bind()方法創(chuàng)建一個新的函數(shù),當被調用時耿币,將其this關鍵字設置為提供的值梳杏,在調用新函數(shù)時,在任何提供之前提供一個給定的參數(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
}
問題4: 以下代碼輸出什么?
document.addEventListener('click', function(e){
    console.log(this); // document
    setTimeout(function(){
        console.log(this); // window
    }, 200);
}, false);
問題5: 以下代碼輸出什么?
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) // $btn
      this.showMsg();
    })
  },
  
  showMsg: function(){
    console.log('饑人谷');
  }
}

原型鏈相關問題

問題7:有如下代碼十性,解釋Person、 prototype塑悼、proto劲适、p、constructor之間的關聯(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();
7.png
問題8: 上例中霞势,對對象 p可以這樣調用 p.toString()。toString是哪里來的? 畫出原型圖?并解釋什么是原型鏈斑鸦。

p.proto指向Person.prototype愕贡,Person.prototype.proto指向Object.prototype,在Object.prototype中存在toString()方法巷屿,因此p可以調用toString()方法固以。

8.png

原型鏈的基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。每一個構造函數(shù)都有一個原型對象嘱巾,原型對象都包含一個指向構造函數(shù)的指針憨琳,而實例都包含一個指向原型對象的內部指針,那么當原型對象又等于另一個類型的實例浓冒,如此層層遞進栽渴,就構成了實例和原型的鏈條,就是原型鏈稳懒。

問題9:對String做擴展闲擦,實現(xiàn)如下方式獲取字符串中頻率最高的字符
        String.prototype.getMostOften = function(){
            var obj = {};
            var maxValue = 0;
            var maxKey = '';
            for (var i = 0; i < this.length; i++) {
                if (obj[this[i]]) {
                    obj[this[i]] ++
                } else {
                    obj[this[i]] = 1
                }
            }
            for(var key in obj){
                if (obj[key] > maxValue) {
                    maxValue = obj[key];
                    maxKey = key;
                }
            }
            return maxKey + "慢味,因為" + maxKey + "出現(xiàn)了" + maxValue + "次"
                
        }
        var str = 'ahbbccdeddddfg';
        var ch = str.getMostOften();
        console.log(ch); //d , 因為d 出現(xiàn)了5次
問題10: instanceOf有什么作用?內部邏輯是如何實現(xiàn)的墅冷?
// 語法
object instanceof constructor

instanceof 運算符用來檢測 constructor.prototype 是否存在于參數(shù) object 的原型鏈上纯路。MDN參考

繼承相關問題

問題11:繼承有什么作用?

子類可以繼承父類的屬性和方法,因此只需定義子類特有的屬性即可寞忿,可以簡化子類的描述驰唬。父類提供的方法,子類通過繼承可以直接使用腔彰,可提高代碼的重用性叫编。

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

方法1中,printName()方法在構造函數(shù)中霹抛,每次實例化搓逾,printName()方法都需要單獨占用內存;
方法2中杯拐,printName()方法寫在原型對象中霞篡,當Person實例化后,調用printName()時會在原型鏈上找到該方法端逼,這些方法都指向Person.prototype對象中朗兵,減少了內存的占用。

問題13: Object.create 有什么作用顶滩?兼容性如何余掖?

Object.create() 方法使用指定的原型對象和其屬性創(chuàng)建了一個新的對象。兼容性參考MDN

問題14: hasOwnProperty有什么作用礁鲁? 如何使用浊吏?

hasOwnProperty() 方法會返回一個布爾值,指示對象是否具有指定的屬性作為自身(不繼承)屬性救氯。該方法會忽略掉那些從原型鏈上繼承到的屬性

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);    //使Person內部this對象指向Male的實例對象找田,使Male的實例對象可以使用Person的屬性。
    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 = new Person();
Male.prototype.getAge = function(){
    return this.age
};

var ruoyu = new Male('若愚', '男', 27);
ruoyu.getName();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末墩衙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甲抖,更是在濱河造成了極大的恐慌漆改,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件准谚,死亡現(xiàn)場離奇詭異挫剑,居然都是意外死亡,警方通過查閱死者的電腦和手機柱衔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門樊破,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愉棱,“玉大人,你說我怎么就攤上這事哲戚”蓟” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵顺少,是天一觀的道長朋其。 經常有香客問我,道長脆炎,這世上最難降的妖魔是什么梅猿? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮秒裕,結果婚禮上粒没,老公的妹妹穿的比我還像新娘。我一直安慰自己簇爆,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布爽撒。 她就那樣靜靜地躺著入蛆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硕勿。 梳的紋絲不亂的頭發(fā)上哨毁,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音源武,去河邊找鬼扼褪。 笑死,一個胖子當著我的面吹牛粱栖,可吹牛的內容都是我干的话浇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闹究,長吁一口氣:“原來是場噩夢啊……” “哼幔崖!你這毒婦竟也來了?” 一聲冷哼從身側響起渣淤,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赏寇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后价认,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗅定,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年用踩,在試婚紗的時候發(fā)現(xiàn)自己被綠了渠退。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忙迁。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖智什,靈堂內的尸體忽然破棺而出动漾,到底是詐尸還是另有隱情,我是刑警寧澤荠锭,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布旱眯,位于F島的核電站,受9級特大地震影響证九,放射性物質發(fā)生泄漏删豺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一愧怜、第九天 我趴在偏房一處隱蔽的房頂上張望呀页。 院中可真熱鬧,春花似錦拥坛、人聲如沸蓬蝶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丸氛。三九已至,卻和暖如春著摔,著一層夾襖步出監(jiān)牢的瞬間缓窜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工谍咆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禾锤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓摹察,卻偏偏與公主長得像恩掷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子供嚎,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容