2、arguments是偽數(shù)組,沒有數(shù)組的共有屬性(push…)的數(shù)組就是偽數(shù)組,arguments的原型是Object.prototype
二 this
1、除了箭頭函數(shù),每個(gè)函數(shù)都有this
2、為什么要使用this?
如果沒有this,有的代碼就很難寫,比如一個(gè)函數(shù)想要獲取對(duì)象的引用
//構(gòu)造對(duì)象
let beauty={ name:'美女',
run(){ console.log(`看` person.name `在跑步`);
}
}
//使用類構(gòu)造對(duì)象
class Person{ constructor(name){ this.name=name;//這里的this是new強(qiáng)制指定的
}
run(){ console.log(`看` xxx.name `在跑步`);
}
}復(fù)制代碼
3、假設(shè)沒有this如果直接構(gòu)造對(duì)象,也還好,我們可以使用保存了對(duì)象地址的變量獲取對(duì)象的name屬性(即引用),但是如果beauty改名,run函數(shù)無法使用。
如果使用類,還沒有創(chuàng)建對(duì)象,故不可能使用對(duì)象的引用,那么如何拿到對(duì)象的name屬性?
4、因此需要一種辦法拿到對(duì)象,這樣才能獲取對(duì)象的屬性
(1) 怎么在還沒有定義對(duì)象,還不知道對(duì)象名字的時(shí)候,拿到對(duì)象的引用呢?
有一種土方法,那就是在定義每個(gè)函數(shù)的時(shí)候,給他寫一個(gè)參數(shù),默認(rèn)這個(gè)參數(shù)指的是以后定義的新對(duì)象,到時(shí)候調(diào)用的時(shí)候,把新對(duì)象傳給他,python就是用的這種方法
class Person{ constructor(name){ this.name=name;//這里的this是new強(qiáng)制指定的
}
run(self){ console.log(`看` self.name `在跑步`);
}
} //這樣每個(gè)參數(shù)接收一個(gè)額外的self,這個(gè)self指未來定義的新對(duì)象
let beauty=new Person('美女');
beauty.run(beauty); //這樣寫了兩個(gè)beauty,有點(diǎn)丑
//在python中直接寫beauty.run()等價(jià)于寫beauty.run(beauty);復(fù)制代碼
(2) js是怎么解決這個(gè)問題的呢?js在每個(gè)函數(shù)中添加了this
let beauty={ name:'美女',
run(){ console.log(`看` this.name `在跑步`);
}
} //beauty.run()相當(dāng)于beauty.run(beauty)
//beauty.run()會(huì)將beauty隱式地傳給run,run可以通過this引用beauty
//可以理解為js引擎隱式地幫你做了this=beauty這件事
//這樣每個(gè)函數(shù)都能通過this隱式的獲取一個(gè)未知對(duì)象的引用了復(fù)制代碼
三 總結(jié)
我們想讓函數(shù)獲取對(duì)象的引用,但是并不想通過變量名做到,python通過額外的self參數(shù)做到,js通過額外的this做到,也就是this就是最終調(diào)用函數(shù)的對(duì)象
四 函數(shù)的兩種調(diào)用方法beauty.run();
會(huì)自動(dòng)把beauty傳到函數(shù)里面作為thisrun.call(anything);需要自己手動(dòng)的將anything傳到函數(shù)里面作為this
五 關(guān)于this的知識(shí)點(diǎn)(假設(shè)fn是一個(gè)普通函數(shù),arrow是一個(gè)箭頭函數(shù))
1、在new fn()調(diào)用的時(shí)候,fn里的this指向新生成的對(duì)象,這是new決定的
2、在fn()調(diào)用中,this默認(rèn)指向window,這是瀏覽器決定的
3、在obj.fn()調(diào)用中,this默認(rèn)指向obj,這是js的隱式傳this
4、在fn.call(xxx)調(diào)用中,this就是xxx,這是開發(fā)者通過call顯示指定的this
5、在arrow()的調(diào)用中,arrow里面的this就是arrow外面的this,因?yàn)榧^函數(shù)里面沒有自己的this
6、在arrow.call(xxx)調(diào)用中,arrow里面的this還是arrow外面的this,因?yàn)榧^函數(shù)里面沒有自己的this
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問題,請(qǐng)?jiān)L問西部數(shù)碼官網(wǎng):m.ps-sw.cn