js中call、apply、bind之间的区别
首先,这三个函数都能指定this的指向,但它们各自都有本人的特点。
1、call函数传参时须要列举进去,咱们用call函数指定this指向对象obj:
var obj = { name:'张三', age:18}function f(a,b){ console.log(this.age + a + b);}f(1,2) //undefinedf.call(obj,1,2) //21
2、对于apply,与call的区别在于传参时以数组的模式传递
var obj = { name:'张三', age:18}function f(a,b){ console.log(this.age + a + b);}f.apply(obj,[1,2]) //21
3、当咱们应用call和apply时,函数会间接被调用,而用bind指定this指向时函数不会立刻调用,而是返回一个新函数,这个函数即便被间接调用其this还是指向所绑定的对象。
var obj = { name:'张三', age:18}function f(a,b){ console.log(this.age + a + b);}var newF = f.bind(obj);newF(1,2); //21var newF2 = f.bind(obj,1);newF2(2); //21
总结:
- call函数接管的第一参数是this绑定的对象,残余须要传递的参数必须列举进去
- apply函数接管的第一参数也是this绑定的对象,残余须要传递的参数要以数组的模式传递。
- bind绑定this指向不会间接运行函数,而是返回一个新函数。bind()接管的第一个参数作为新函数的this指向,残余参数须要列举进去,且会在调用新函数时传递给新函数。