言简意赅的说
三者共同点:
(1):三者均是改变函数执行时的上下文;
(2):三者第一个参数均是this的新指向;
(3):三者可以通过后续的参数向函数进行传参;
三者的区别:
上代码:
1 let tomInfo={ 2 name:"tom", 3 type:"cat", 4 job:function(param1,param2,param3){ 5 console.log(this.name);
console.log(param1);
console.log(param2);
console.log(param3);
6 } 7 } 8 let jerryInfo={ 9 name:"jerry", 10 type:"mouse", 11 job:function(){ 12 console.log(this.name); 13 }, 14 } 15 tomInfo.job();//job 16 tomInfo.job.apply(jerryInfo,[1,2,3],99); //jerry 1 2 3; 17 tomInfo.job.bind(jerryInfo,1,2,3)();//jerry 1 2 3; 18 tomInfo.job.call(jerryInfo,1,2,3);//jerry 1 2 3;
从以上的代码可以归纳总结以下三点:
(1):apply会执行调用apply的函数,并且this指向第一个参数,第二个参数是个数组,从第三个参数没有输出说明appaply只接受两个参数,但是在接收的时候需要根据数组的index依次去获取;
(2):bind不会执行调用bind的函数,会将调用bind的函数返回,并且将this指向第一个参数,后续可以接着传n个参数,在接收的时候,依次去获取,从需要在bind() 后面再加上一对()可以看出bind的返 回值是个函数;
(3):call会指向调用call的函数,并且this指向第一个参数;后续可以接着传n个参数,在接收的时候,依次去获取;
扫描二维码关注公众号,回复:
10802384 查看本文章
以上就是 apply bind call (a,b,c)的共同点和区别;
下篇手动实现一个bind函数;