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