1.JS改变改变函数执行时上下文之apply(a)、bind(b)、call (c)

言简意赅的说

  三者共同点:

    (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个参数,在接收的时候,依次去获取;

   以上就是 apply bind call (a,b,c)的共同点和区别;

下篇手动实现一个bind函数;

猜你喜欢

转载自www.cnblogs.com/hylCodeHouse/p/12702564.html