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