關(guān)于call的使用
function?add(c,d){ ? return?this.a?+this.b+c?+d; ? } ? var?o?={a:1,b:3}; ? add.call(o,1,10); ?
這里在定義function add的時(shí)候,沒有定義ab變量,為什么不會(huì)報(bào)錯(cuò)呢?老師說這個(gè)call使用之后,1 和10就會(huì)傳給add里面的c 和d,然后add里面的a和b就是o里面的a和b???是不是因?yàn)槎际莂和b所以就是一樣的???如果o里面的不是a和b呢?
2016-10-18
關(guān)于add.call(o,1,10);你可以理解為,對(duì)象o中有了add這個(gè)方法,即:
var o{
a:1,
b:3,
// 在對(duì)象o中新增加了?
function?add(c,d){
?
???????????return?this.a?+this.b+c?+d;
???????}
?
?return?this.a?+this.b+c?+d
}
此時(shí)的a,b就是1,3;而1,10就是c,d
2016-10-18
call和apply可以按你說的這樣,那bind方法呢?
2016-10-18
上邊這位說的很到位,其實(shí)就是相當(dāng)于個(gè)o對(duì)象添加了一個(gè)方法而已,只不過這個(gè)方法沒有定義在對(duì)象的內(nèi)部,相當(dāng)于吧一個(gè)函數(shù)的方法用call方法調(diào)用給了這個(gè)對(duì)象。
2016-10-18
定義函數(shù)可以傳入?yún)?shù)也可以不傳入?yún)?shù),因?yàn)楹瘮?shù)對(duì)象默認(rèn)會(huì)有arguments內(nèi)置方法來保存函數(shù)調(diào)用時(shí)實(shí)際傳入的參數(shù)。這個(gè)add函數(shù)定義時(shí)沒有傳入啊,a,b參數(shù)但是上邊的函數(shù)是為下方o對(duì)象調(diào)用call方法是調(diào)用函數(shù)的this.a和this.b來使用,相當(dāng)于對(duì)象調(diào)用函數(shù)對(duì)象那個(gè)的方法來使用。call方法第一個(gè)傳入要綁定this的對(duì)象,后邊傳入單個(gè)參數(shù)。如果還不理解就上網(wǎng)查call和apply和bind的具體用法。