亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

面試遇到的一個問題,小白求教關于原型鏈的

面試遇到的一個問題,小白求教關于原型鏈的

拉莫斯之舞 2018-08-02 13:24:52
function C1(name){    if(name) this.name=name;}function C2(name){    this.name=name;}function C3(name){    this.name=name||'john';}//C1.prototype.name="Tom";C2.prototype.name="Tom";C3.prototype.name="Tom";alert((new C1().name)+(new C2().name)+(new C3().name));//我理解的本地name都沒聲明,訪問的都是prototype的name屬性//所以有個疑問就是沒有聲明的屬性也可以去原型里找嗎//不是應該聲明沒賦值才有用么
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

C1,if不成立,new C1()中沒有name屬性,就訪問到了原型上的name,輸出tom
C2,既然沒有參數,也就是執行new C2(undefined),所以name為undefined
C3,new C3()的name值為john,所輸出john

查看完整回答
反對 回復 2018-08-05
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

你的問題在于在構造實例時沒有聲明name,因為根本沒有為構造函數傳參數,那么真是如此嗎?

function test(t) {    
        console.log(t);//undefined
    console.log(a);//報錯}
test();

可以看到,即使沒有給一個帶參的函數傳參,也能訪問到這個參數,這個參數的值是undefined。
這其實涉及到arguments,js函數定義時的參數其實是不必要的,因為函數內部其實訪問的是一個類數組對象arguments,傳進來的參數依次放到這個對象中。

function test(t) {    
        console.log(arguments[0]);//undefined
    console.log(arguments[1]);//undefined}
test();

所以第一個構造函數沒有聲明和初始化name,實例去原型中找name屬性。但剩下的兩個構造函數為name賦值undefined。
所以這道題的答案是:Tomundefinedjohn。


查看完整回答
反對 回復 2018-08-05
  • 2 回答
  • 0 關注
  • 1331 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號