JS-call,bind,apply

2018-09-08  本文已影响24人  Rainism_140d

先中文翻译下,call(访问/呼叫) bind(捆绑/约束)apply(申请/请求),由下图可得知call,bind,apply都是Function对象的方法。

再使用了一候后,发觉call,apply,bind是为了让函数方法的复用,节省空间,请看下面例子:

图中小红跟小张是朋友,相约一起去上海,一天另一人同时对他们两个人问起同一问题,小红不善表达,这时就借小张之口帮小红说出。

综上call跟apply是都正确执行了结果,bind返回了函数体,先撇开bind,首先搞清楚call,apply的不同吧。

修改下上面say的内容

再执行

差别就出来了,call的第二部分参数,需要传入的是字符串,可以一个一个传入

而apply一个一个传入时,报错,要想正确显示,需要将参数放入一个数组内,才能正确运行。


接下来解决bind就大功告成了~

之前我们,已经知道bind返回时函数体,那么要其执行,就在后面加上()就可以了,执行问题解决了,那么我们传入参数试试,第一次传入数组时,bind把数组当成第一个参数执行,第二次传入一个一个字符串,完美执行了,

第三次传入两个数字,按第二种情况执行了,bind的结果也出来了,不同apply,bind的参数传入方式跟call相似。

总结: 

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:

call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面  zhang.say.call(hong,'山西', ... ,'string' );

apply的所有参数都必须放在一个数组里面传进去   zhang.say.apply(hong,,['山西', ..., 'string' ]);

bind除了返回是函数体以外,它 的参数和call 一样。

当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!

上一篇下一篇

猜你喜欢

热点阅读