call、apply、bind 的区别

95 阅读1分钟

call、apply

首先它们都是用来改变函数内部的this指向,call和appley唯一不同的就是传入的参数不同。

  • call 的用法要说出第一个参数是 this,后面的参数是 arguments 或其他参数

  • apply 的用法要说出第二个参数必须是数组,内含所有其他参数

obj1={
    sum:0
}

fn(a,b){
    this.sum = a+b;
}

fn.call(obj1,2,3);
obj1.sum //5

fn.apply(obj1,[1,10]); 
obj1.sum //11

bind

bind用于将函数中的this绑定为某个对象

fn1 =fn.bind(obj1); // bind 在 绑定时也可以传参

fn1(2,3) 
obj1.sum //5

fn.bind(x,y,z) 不会执行 fn,而是会返回一个新的函数 新的函数执行时,会调用 fn,调用形式为 fn.call(x, y, z),其中 x 是 this,y 和z 是其他参数