摘要:我們把需要的函數(shù)拿出來,看起來會(huì)爽的多看到這里是不是就很清晰了簡單的構(gòu)造函數(shù)加原型的繼承結(jié)合上面兩問該問題可以這樣寫回到了用構(gòu)造函數(shù)調(diào)用的模式
先把面試題貼出來:
//請(qǐng)回答下面函數(shù)依次執(zhí)行出什么; function Foo () { bar = function () { console.log(1) } return this; } Foo.bar = function () { console.log(2) } Foo.prototype.bar = function () { console.log(3) } var bar = function () { console.log(4) } function bar () { console.log(5) } Foo.bar();//2 bar();//4 Foo().bar();//1 bar();//1 new Foo.bar();//3 new Foo().bar();//3 new new Foo().bar();//3剛看到這個(gè)問題,著實(shí)有點(diǎn)暈;不過細(xì)細(xì)分析下來,還是有點(diǎn)門道的。 首先我們來看一下這道題考察的是什么
1. Foo.bar();//2
由于瀏覽器在執(zhí)行js時(shí)是同步去執(zhí)行的,這里可以將Foo.bar看做 a ;這時(shí)就相當(dāng)于:
a = function () { console.log(2) }//由于不是嚴(yán)格模式,這里省略了聲明函數(shù)的關(guān)鍵字 var; a();//2
2. bar();// 4
這個(gè)執(zhí)行相應(yīng)的函數(shù)體:
var bar = function () { console.log(4) }
3. Foo().bar();// 1
Foo() 會(huì)去執(zhí)行function Foo(){};同時(shí)會(huì)返回出一個(gè)全局的this;
Foo().bar() 執(zhí)行函數(shù)Foo體內(nèi)的bar函數(shù)
4. bar();// 1
第一個(gè)問題bar()執(zhí)行的是函數(shù):
var bar = function () { console.log(4); }//打印出來的是4
而在執(zhí)行Foo().bar()時(shí),Foo()會(huì)返回出來全局this,this內(nèi)部的bar函數(shù)為:
bar = function () { console.log(1) }
此時(shí)會(huì)覆蓋其余的bar函數(shù)
5. new Foo.bar();// 2
構(gòu)造函數(shù)調(diào)用模式;
Foo.bar = function () { console.log(2) } var foo =new Foo.bar(); //把Foo.bar看做為整體如newFoo(){},newFoo就變成了構(gòu)造函數(shù) var foo = new newFoo();// foo => 2
6. new Foo().bar();// 3
我們把需要的函數(shù)拿出來,看起來會(huì)爽的多;
function Foo () { bar = function () { console.log(1) } return this; } Foo.prototype.bar = function () { console.log(3) } var foo = new Foo(); foo.bar() //3
看到這里是不是就很清晰了;簡單的構(gòu)造函數(shù)加原型的繼承;
7. new new Foo().bar();// 3
結(jié)合上面兩問;該問題可以這樣寫;
new new Foo().bar() => new foo.bar() =>new newFoo()//回到了用構(gòu)造函數(shù)調(diào)用的模式;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82007.html
摘要:項(xiàng)目組長給我看了一道面試別人的面試題。打鐵趁熱,再來一道題來加深下理解。作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVbur0z?w=600&h=400); 剛?cè)肼毿鹿荆瑢儆诠久刃乱幻叮惶煜挛鐚?duì)著屏幕看代碼架構(gòu)時(shí)。BI項(xiàng)目組長給我看了一道面試別人的JS面試題。 雖然答對(duì)了,但把理由說錯(cuò)了,照樣不及格。 ...
摘要:想必面試題刷的多的同學(xué)對(duì)下面這道題目不陌生,能夠立即回答出輸出個(gè),可是你真的懂為什么嗎為什么是輸出為什么是輸出個(gè)這兩個(gè)問題在我腦邊縈繞。同步任務(wù)都好理解,一個(gè)執(zhí)行完執(zhí)行下一個(gè)。本文只是我對(duì)這道面試題的一點(diǎn)思考,有誤的地方望批評(píng)指正。 想必面試題刷的多的同學(xué)對(duì)下面這道題目不陌生,能夠立即回答出輸出10個(gè)10,可是你真的懂為什么嗎?為什么是輸出10?為什么是輸出10個(gè)10?這兩個(gè)問題在我腦...
摘要:直接開始題目是厲害了說句實(shí)話開發(fā)中誰寫成這樣保證會(huì)被打死。不過面試就是面試,有面試官的考量點(diǎn)。官方是這么說的。結(jié)果完美,不過小姐姐的意思是數(shù)組的方法會(huì)自動(dòng)觸發(fā)數(shù)組的。 直接開始題目是 if(a==1 && a==2 && a==3){ alert(厲害了) } 說句實(shí)話開發(fā)中誰寫成這樣保證會(huì)被打死。 不過面試就是面試,有面試官的考量點(diǎn)。 我理解的點(diǎn)有兩個(gè) 1、隱式類型轉(zhuǎn)換 先說...
摘要:另一個(gè)問題,就是我下面要提及的作用域問題,我當(dāng)時(shí)思考的時(shí)間太久了這是回憶中的面試題實(shí)際略有差異,不糾結(jié)了說一下腳本的運(yùn)行結(jié)果引用錯(cuò)誤中給出的錯(cuò)誤提示。 版權(quán)聲明:此文首發(fā)于我的簡書賬號(hào)人生還有多少個(gè)二十年,轉(zhuǎn)載請(qǐng)注明出處。 此處有幾百字嘮叨: 當(dāng)天,我早早起床,跨越上百公里,高德導(dǎo)航,路人指點(diǎn),跌跌撞撞到達(dá)招聘會(huì)現(xiàn)場,當(dāng)時(shí)已是中午十二點(diǎn)半,吃了午餐(半瓶白開水),開始準(zhǔn)備投遞...
摘要:首先,我先去上搜索了的定義運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象的實(shí)例。 今天看到一道面試題,如下,問: 實(shí)例化 Person 過程中,Person返回什么(或者 p 等于什么)? function Person(name) { this.name = name return name; } let p = new Person(Tom); 說實(shí)...
閱讀 3438·2023-04-25 18:14
閱讀 1535·2021-11-24 09:38
閱讀 3252·2021-09-22 14:59
閱讀 3066·2021-08-09 13:43
閱讀 2571·2019-08-30 15:54
閱讀 569·2019-08-30 13:06
閱讀 1552·2019-08-30 12:52
閱讀 2724·2019-08-30 11:13