- 相關(guān)推薦
前端程序員JavaScript面試題(3)
第六問(wèn)
第六問(wèn) new Foo().getName() ,首先看運(yùn)算符優(yōu)先級(jí)括號(hào)高于new,實(shí)際執(zhí)行為
(new Foo()).getName()
遂先執(zhí)行Foo函數(shù),而Foo此時(shí)作為構(gòu)造函數(shù)卻有返回值,所以這里需要說(shuō)明下js中的構(gòu)造函數(shù)返回值問(wèn)題。
構(gòu)造函數(shù)的返回值
在傳統(tǒng)語(yǔ)言中,構(gòu)造函數(shù)不應(yīng)該有返回值,實(shí)際執(zhí)行的返回值就是此構(gòu)造函數(shù)的實(shí)例化對(duì)象。
而在js中構(gòu)造函數(shù)可以有返回值也可以沒(méi)有。
1、沒(méi)有返回值則按照其他語(yǔ)言一樣返回實(shí)例化對(duì)象。
image_thumb1
2、若有返回值則檢查其返回值是否為引用類(lèi)型。如果是非引用類(lèi)型,如基本類(lèi)型(string,number,boolean,null,undefined)則與無(wú)返回值相同,實(shí)際返回其實(shí)例化對(duì)象。
image_thumb2
3、若返回值是引用類(lèi)型,則實(shí)際返回值為這個(gè)引用類(lèi)型。
image_thumb3
原題中,返回的是this,而this在構(gòu)造函數(shù)中本來(lái)就代表當(dāng)前實(shí)例化對(duì)象,遂最終Foo函數(shù)返回實(shí)例化對(duì)象。
之后調(diào)用實(shí)例化對(duì)象的getName函數(shù),因?yàn)樵贔oo構(gòu)造函數(shù)中沒(méi)有為實(shí)例化對(duì)象添加任何屬性,遂到當(dāng)前對(duì)象的原型對(duì)象(prototype)中尋找getName,找到了。
遂最終輸出3。
第七問(wèn)
第七問(wèn), new new Foo().getName(); 同樣是運(yùn)算符優(yōu)先級(jí)問(wèn)題。
最終實(shí)際執(zhí)行為:
new ((new Foo()).getName)();
先初始化Foo的實(shí)例化對(duì)象,然后將其原型上的getName函數(shù)作為構(gòu)造函數(shù)再次new。
遂最終結(jié)果為3
最后
就答題情況而言,第一問(wèn)100%都可以回答正確,第二問(wèn)大概只有50%正確率,第三問(wèn)能回答正確的就不多了,第四問(wèn)再正確就非常非常少了。其實(shí)此題并沒(méi)有太多刁鉆匪夷所思的用法,都是一些可能會(huì)遇到的場(chǎng)景,而大多數(shù)人但凡有1年到2年的工作經(jīng)驗(yàn)都應(yīng)該完全正確才對(duì)。
只能說(shuō)有一些人太急躁太輕視了,希望大家通過(guò)此文了解js一些特性。
【前端程序員JavaScript面試題(3)】相關(guān)文章:
前端工程師面試題10-20
Web前端面試題目及答案06-30
Microsoft面試題09-04
iOS面試題07-10
公司面試題09-12
hibernate面試題10-18
英語(yǔ)面試題精選06-13
小升初面試題06-10
PHP面試題10-14
小升初面試題型08-24