apply、bind和call的区别

call()、apply()、bind() 都是用来重定义 this 这个对象的

代码

var obj1 = {
  name: '小红',
  age: 18,
  fn: function(arg1, arg2) {
    console.log(this.name, '+ 参数传递为', arg1, arg2);
  }
}
var obj2 = {
  name: '小蓝',
  sex:'男'
}
obj1.fn.call(obj1, 'call1', 'call2') // 输出小蓝 + 参数传递为 call1 call2
obj1.fn.bind(obj2, 'bind1', 'bind2')() // 输出小蓝 + 参数传递为 bind1 bind2
obj1.fn.apply(obj2, ['apply1', 'apply2']) // 输出小蓝 + 参数传递为 apply1 apply2

首先我们可以看到, 这三个方法都是改变了this的指向,原obj1的指向为本身 使用之后都指向了obj2

区别:

我们看输出可以看出来,最后结果都一样 区别在于传参的方式和返回的结果
call 和 bind都是通过多个参数传递(argument1, argment2,...)这样的方式传递,但是bind返回结果是一个函数,我们必须执行这个函数 这就是为什么后面有一个"()"
然后apply和其他两个的不同就是在于参数只能传递在一个参数中,通过数组方式传递([argument1, argument2,....])
这就是效果和不同点和共同点,以上分享为个人观点,有错误望指出

特殊使用

1.比如
obj1.fn.apply(null, ['null1', 'null2']) // undefined + 参数传递为 null1 null2
这种情况是没有什么代替的,但是需要用数组形式传递参数 就可以使用这样的操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容