先中文翻譯下,call(訪問/呼叫) bind(捆綁/約束)apply(申請/請求)庵寞,由下圖可得知call狸相,bind,apply都是Function對象的方法捐川。
再使用了一候后脓鹃,發(fā)覺call,apply古沥,bind是為了讓函數(shù)方法的復(fù)用瘸右,節(jié)省空間,請看下面例子:
圖中小紅跟小張是朋友岩齿,相約一起去上海太颤,一天另一人同時對他們兩個人問起同一問題,小紅不善表達盹沈,這時就借小張之口幫小紅說出龄章。
綜上call跟apply是都正確執(zhí)行了結(jié)果,bind返回了函數(shù)體乞封,先撇開bind做裙,首先搞清楚call,apply的不同吧歌亲。
修改下上面say的內(nèi)容
再執(zhí)行
差別就出來了菇用,call的第二部分參數(shù),需要傳入的是字符串陷揪,可以一個一個傳入
而apply一個一個傳入時惋鸥,報錯杂穷,要想正確顯示,需要將參數(shù)放入一個數(shù)組內(nèi)卦绣,才能正確運行耐量。
接下來解決bind就大功告成了~
之前我們,已經(jīng)知道bind返回時函數(shù)體滤港,那么要其執(zhí)行廊蜒,就在后面加上()就可以了,執(zhí)行問題解決了溅漾,那么我們傳入?yún)?shù)試試山叮,第一次傳入數(shù)組時,bind把數(shù)組當成第一個參數(shù)執(zhí)行添履,第二次傳入一個一個字符串屁倔,完美執(zhí)行了,
第三次傳入兩個數(shù)字暮胧,按第二種情況執(zhí)行了,bind的結(jié)果也出來了钞翔,不同apply布轿,bind的參數(shù)傳入方式跟call相似驮捍。
總結(jié):
call 启具、bind 鲁冯、 apply 這三個函數(shù)的第一個參數(shù)都是 this 的指向?qū)ο笫硌荩诙€參數(shù)差別就來了:
call的參數(shù)是直接放進去的跨扮,第二第三第n個參數(shù)全都用逗號分隔,直接放到后面? zhang.say.call(hong,'山西', ... ,'string' )晶通;
apply的所有參數(shù)都必須放在一個數(shù)組里面?zhèn)鬟M去 ??zhang.say.apply(hong,,['山西', ..., 'string' ]);
bind除了返回是函數(shù)體以外狮辽,它 的參數(shù)和call 一樣。
當然树叽,三者的參數(shù)不限定是string類型菱皆,允許是各種類型仇轻,包括函數(shù) 、 object 等等疲陕!