this_原型鏈_繼承

問(wèn)題1: apply、call 、bind有什么作用仰猖,什么區(qū)別

call(),apply(),調(diào)用一個(gè)函數(shù)奈籽,傳入函數(shù)執(zhí)行上下文及參數(shù)
call()方法接收參數(shù)列表饥侵,而apply()接收參數(shù)數(shù)組
bind()方法會(huì)創(chuàng)建一個(gè)函數(shù),函數(shù)體內(nèi)this對(duì)象的值會(huì)被綁定到傳入bind()函數(shù)的值衣屏。

問(wèn)題2: 以下代碼輸出什么?

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

問(wèn)題3: 下面代碼輸出什么躏升,為什么

        func() 
        function func() { 
            alert(this)
        }
        //window    因?yàn)闆](méi)有傳值 默認(rèn)為window       

問(wèn)題4:下面代碼輸出什么

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

問(wèn)題5:下面代碼輸出什么,why

        var john = { 
            firstName: "John" 
        }

        function func() { 
            alert( this.firstName )
        }
        func.call(john)
        //John  調(diào)用func的方法來(lái)執(zhí)行john

問(wèn)題6: 以下代碼有什么問(wèn)題狼忱,如何修改

        var module= {
            bind: function(){
                $btn.on('click', function(){
                console.log(this) //this指什么 指$btn
                this.showMsg(); //$btn沒(méi)有showMsg這個(gè)方法 會(huì)出錯(cuò)
                })
            },
            
            showMsg: function(){
                console.log('饑人谷');
            }
        }

修改后

        var module= {
            bind: function(){
                var _this =this
                $btn.on('click', function(){
                console.log(this)
                _this.showMsg(); 
                })
            },
            
            showMsg: function(){
                console.log('饑人谷');
            }
        }    

問(wè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();
原型圖.png

問(wèn)題8: 上例中,對(duì)對(duì)象 p可以這樣調(diào)用 p.toString()双霍。toString是哪里來(lái)的? 畫(huà)出原型圖?并解釋什么是原型鏈砚偶。

toString是從obj的原型里繼承而來(lái)的
任何類的prototype屬性本質(zhì)上都是個(gè)類Object的實(shí)例,
所以prototype也和其它實(shí)例一樣也有個(gè)proto內(nèi)部屬性洒闸,
指向其類型Object的prototype
調(diào)用方法和屬性時(shí)會(huì)優(yōu)先查找自身有沒(méi)有染坯,如果沒(méi)有則通過(guò)proto往上尋找,
還沒(méi)有則重復(fù)動(dòng)作丘逸,直到往上沒(méi)有proto返回undefined
這種結(jié)構(gòu)就叫原型鏈

原型鏈.png

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

        var str = 'ahbbccdeddddfg';
        var ch = str.getMostOften();
        console.log(ch); //d , 因?yàn)閐 出現(xiàn)了5次
        String.prototype.getMostOften = function(){
        var mostOften = 0;
        var mostStr = 0;
        var obj = {};
        for(var i=0; i<this.length; i++){
            if(obj[this[i]]){
            obj[this[i]]++;
            }
            else{
            obj[this[i]] = 1;
            }
        }
        for(i in obj){
            if(obj[i] > mostOften){
            mostOften = obj[i];
            mostStr = i;
            }
        }
        return mostStr;
        };

問(wèn)題10: instanceOf有什么作用??jī)?nèi)部邏輯是如何實(shí)現(xiàn)的深纲?

判斷一個(gè)對(duì)象是不是某個(gè)類型的實(shí)例

function instance_of(L, R) {//L 表示左表達(dá)式仲锄,R 表示右表達(dá)式
    var O = R.prototype;// 取 R 的顯示原型
    var L = L.__proto__;// 取 L 的隱式原型
    while (true) { 
         if (L === null) 
              return false; 
         if (O === L) 
                 return true; 
         L = L.__proto__; 
     } 
}

問(wèn)題11:繼承有什么作用?

復(fù)用其他obj現(xiàn)成的屬性或方法

問(wèn)題12: 下面兩種寫(xiě)法有什么區(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每次調(diào)用時(shí)都會(huì)創(chuàng)建一個(gè)新的方法,而方法2每次調(diào)用時(shí)不會(huì)創(chuàng)建新的方法湃鹊,而是使用prototype上的公共方法,節(jié)省了代碼量儒喊,提高了性能

問(wèn)題13: Object.create 有什么作用?兼容性如何币呵?

clone了一個(gè)新的prototype而不是直接把Person.prtotype直接賦值怀愧,因?yàn)橐藐P(guān)系,直接賦值會(huì)導(dǎo)致后續(xù)修改子類的prototype也修改了父類的prototype余赢,目前支持該方法的瀏覽器有IE9+,Firefox4+芯义, Safari5+,Opera12+ 和Chrome。IE6/7/8 不支持

問(wèn)題14: hasOwnProperty有什么作用妻柒? 如何使用扛拨?

可以判斷一個(gè)對(duì)象是否包含自定義屬性而不是原型鏈上的屬性
object.hasOwnProperty('屬性')//返回布爾值

問(wèn)題15:如下代碼中call的作用是什么?

        function Person(name, sex){
            this.name = name;
            this.sex = sex;
        }
        function Male(name, sex, age){
            Person.call(this, name, sex);    //這里的 call 表示調(diào)用Person的方法使用Male的參數(shù)
            this.age = age;
        }    

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

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

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

        function Male(name, sex, age){
            this.name=name;
            this.sex=sex;
            this.age=age;
        }
        Person.prototype.printName = function(){
            console.log(this.name)
        };
        Male.prototype=Object.create(Person.prototype)
        Male.prototype.getAge = function(){
            return this.age
        };

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛤奢,一起剝皮案震驚了整個(gè)濱河市鬼癣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啤贩,老刑警劉巖待秃,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異痹屹,居然都是意外死亡章郁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)暖庄,“玉大人聊替,你說(shuō)我怎么就攤上這事∨嗬” “怎么了惹悄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肩钠。 經(jīng)常有香客問(wèn)我泣港,道長(zhǎng),這世上最難降的妖魔是什么价匠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任当纱,我火速辦了婚禮,結(jié)果婚禮上踩窖,老公的妹妹穿的比我還像新娘坡氯。我一直安慰自己,他們只是感情好洋腮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布箫柳。 她就那樣靜靜地躺著,像睡著了一般徐矩。 火紅的嫁衣襯著肌膚如雪滞时。 梳的紋絲不亂的頭發(fā)上叁幢,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天滤灯,我揣著相機(jī)與錄音,去河邊找鬼曼玩。 笑死鳞骤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的黍判。 我是一名探鬼主播豫尽,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顷帖!你這毒婦竟也來(lái)了美旧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贬墩,失蹤者是張志新(化名)和其女友劉穎榴嗅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體陶舞,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗽测,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肿孵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唠粥。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疏魏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晤愧,到底是詐尸還是另有隱情大莫,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響墓赴,放射性物質(zhì)發(fā)生泄漏产禾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一泪蔫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦介评、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至情屹,卻和暖如春坪仇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垃你。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工椅文, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惜颇。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓皆刺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凌摄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羡蛾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 1. apply、call 锨亏、bind有什么作用痴怨,什么區(qū)別? call ,apply的作用:調(diào)用一個(gè)函數(shù)器予,傳入函數(shù)...
    Rising_suns閱讀 390評(píng)論 0 0
  • this 相關(guān)問(wèn)題 問(wèn)題1: apply浪藻、call 有什么作用,什么區(qū)別 Javascript的每個(gè)Functio...
    Maggie_77閱讀 592評(píng)論 0 0
  • 通過(guò)題目來(lái)熟悉this劣摇,原型鏈珠移,繼承 開(kāi)胃菜----this 1. apply、call、bind有什么作用,有什...
    JunVincetHuo閱讀 377評(píng)論 0 0
  • this 問(wèn)題1: apply钧惧、call 暇韧、bind有什么作用,什么區(qū)別 call 和 apply 都是為了改變某...
    好奇而已閱讀 312評(píng)論 0 0
  • 一浓瞪、this 相關(guān)問(wèn)題 知乎上關(guān)于this的解答 this 的值到底是什么懈玻?一次說(shuō)清楚 this 的工作原理在js...
    66dong66閱讀 549評(píng)論 0 0