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