2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
C1,if不成立,new C1()中沒(méi)有name屬性,就訪問(wèn)到了原型上的name,輸出tom
C2,既然沒(méi)有參數(shù),也就是執(zhí)行new C2(undefined),所以name為undefined
C3,new C3()的name值為john,所輸出john

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
你的問(wèn)題在于在構(gòu)造實(shí)例時(shí)沒(méi)有聲明name
,因?yàn)楦緵](méi)有為構(gòu)造函數(shù)傳參數(shù),那么真是如此嗎?
function test(t) { console.log(t);//undefined console.log(a);//報(bào)錯(cuò)} test();
可以看到,即使沒(méi)有給一個(gè)帶參的函數(shù)傳參,也能訪問(wèn)到這個(gè)參數(shù),這個(gè)參數(shù)的值是undefined
。
這其實(shí)涉及到arguments
,js函數(shù)定義時(shí)的參數(shù)其實(shí)是不必要的,因?yàn)楹瘮?shù)內(nèi)部其實(shí)訪問(wèn)的是一個(gè)類數(shù)組對(duì)象arguments
,傳進(jìn)來(lái)的參數(shù)依次放到這個(gè)對(duì)象中。
function test(t) { console.log(arguments[0]);//undefined console.log(arguments[1]);//undefined} test();
所以第一個(gè)構(gòu)造函數(shù)沒(méi)有聲明和初始化name
,實(shí)例去原型中找name屬性。但剩下的兩個(gè)構(gòu)造函數(shù)為name
賦值undefined
。
所以這道題的答案是:Tomundefinedjohn
。
添加回答
舉報(bào)