JS中call aplly bind的区别
call、apply、bind的作用是改变函数运行时this的指向。
1. call()的第一个参数为this绑定的对象,后面传入一串参数列表。
当第一参数为null或undefined时,默认指向window对象。
2. apply()和call()类似,唯一的不同点在于第二个参数传入一个参数数组。
当第一参数为null或undefined时,默认指向window对象。
3. bind()和call()类似,不同点一bind()不会立即执行,而是返回一个改变了this后的函数
示例:
let obj1 = {
name: 'obj1',
fn1(param) {
console.log(this.name, param);
}
}
let obj2 = {
name: 'obj2',
fn1(param) {
console.log(this.name, param);
}
}
obj1.fn1('param1') //输出 obj1 param1
obj1.fn1.call(obj1, 'param1') //输出 obj1 param1
obj1.fn1.call(obj2, 'param1') //输出 obj2 param1
//apply的第二个参数为参数数组
obj1.fn1.apply(obj2, ['param1']) //输出 obj2 param1
//bind方法返回一个函数,但不会执行,这个函数的参数继承bind方法的参数
let fun = obj1.fn1.bind(obj2, 'param')
fun() //输出 obj2 param1