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