美文网首页
JS-call,bind,apply

JS-call,bind,apply

作者: Rainism_140d | 来源:发表于2018-09-08 09:05 被阅读24次

    先中文翻译下,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 等等!

    相关文章

      网友评论

          本文标题:JS-call,bind,apply

          本文链接:https://www.haomeiwen.com/subject/nclcgftx.html