(十七) bind()方法

1. bind()方法

bind()方法和call() / apply()方法一样, 都是用来改变函数中的this指向

只不过bind()只改变this指向, 不执行当前函数, 类似预先改变this

function.bind(thisArg, arg1,arg2,...), 参数说明:

  • thisArg: 预指定的this指向
  • arg1, arg2, ... 预设置的参数

还有一个要注意的点就是: bind方法有返回值

  • 它返回一个function的拷贝,并拥有指定的 this 值和初始参数

要点: 只改变this指向, 不执行函数

示例

var obj = {
  name: '猫13'
}

fn(){
  console.log(this.name);
  console.log(num1 + num2);
}

// 需求: 当body被点击后,让fn中的this指向obj
// document.body.onclick = fn.call(obj)  =>  不行, 因为fn不等你点击就执行了
document.body.onclick = function () {
  fn.call(obj)
}
// 上面时一种实现方式: 通过在匿名函数中让fn调用call方法改变this
// 更为简单的方式是利用bind()
document.body.onclick = fn.bind(obj, 10, 20)  // 猫13  30

IE6 7 8中不支持bind方法

关于 bind方法的返回值, 它返回一个function的拷贝,并拥有指定的 this 值和初始参数

var obj = {
  num: 100,
  showNum: function () {
    console.log(this.num);
  }
}

var global = obj.showNum.bind(obj)

global()	// 100

像bind这种预先做某种事情的思想被称为函数柯里化

posted @ 2021-07-29 21:20  只猫  阅读(547)  评论(0编辑  收藏  举报