JS中call aplly bind的区别

callapplybind的作用是改变函数运行时this的指向。

  • call()的第一个参数为this绑定的对象,后面传入一串参数列表
    当第一参数为nullundefined时,默认指向window对象
  • apply()call()类似,唯一的不同点在于第二个参数传入一个参数数组
    当第一参数为nullundefined时,默认指向window对象
  • bind()call()类似,不同点一bind()不会立即执行,而是返回一个改变了this后的函数;
    不同点二在于当你调用fn1 = fn.bind(newThis,param1)方法后,执行fn2(prama2)时,参数prama2会加到param1后面。
    示例代码:
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
//call的第一参数为调用该函数的对象时,等价于一般调用
obj1.fn1.call(obj1, 'param1')     //输出 obj1 param1
//改变this指针,指向obj2
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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。