JS系列

apply 、call

  • apply、 call  都可以改变一个函数的上下文对象(也就是this),并且是立即执行的
  • 调用 call 和 apply 的对象,必须是一个函数 Function
  • call 的写法: Function.call(obj, params1, params2, params3, ...);
  • apply的写法: Function.apply(obj, [params1, params2, params3, ...]);能接收两个参数

 

bind

  bind()方法主要就是将函数绑定到某个对象;

  bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值;

  例如,f.bind(obj),实际上可以理解为obj.f(),这时,f函数体内的this自然指向的是obj;

  

  看一个例子: 

如果此时调用: m(); 那么返回  1 + 2 + undefined 就是 NaN

  如果此时调用:m(3); 那么返回 1 + 2 + 3 就是 6

   

  说明: 

  bind方法会把它的第一个实参绑定给 f 函数体内的this,这里的this 就是 {x : 1} 

  第二个参数起,会依次传递给原始函数,这里的第二个参数 2 ,就是 f 函数的 y 参数

  最后调用 m 方法的时候,会将参数累加到函数 f 上,所以如果没有传参数,那么 z 就是undefined,传递 3,那么 z 就是3 

  分步处理参数的过程其实是一个典型的函数柯里化的过程

 

动手实现一个bind函数:

  

实现一个apply函数:

实现一个call函数:

 

  

  

 

 

 

原文地址:https://www.cnblogs.com/vs1435/p/12626785.html