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) //undefined
f.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); //21
var newF2 = f.bind(obj,1);
newF2(2); //21
总结:
- call 函数接管的第一参数是 this 绑定的对象,残余须要传递的参数必须列举进去
- apply 函数接管的第一参数也是 this 绑定的对象,残余须要传递的参数要以数组的模式传递。
- bind 绑定 this 指向不会间接运行函数,而是返回一个新函数。bind() 接管的第一个参数作为新函数的 this 指向,残余参数须要列举进去,且会在调用新函数时传递给新函数。