0
点赞
收藏
分享

微信扫一扫

JavaScript 的 call/apply/bind 的用法

互联网码农 2022-02-19 阅读 89

call()、apply()、bind() 都是用来重定义 this 对象
call 和 apply 调用后都会立即执行函数
bind 会返回函数本身,使用 bind 可以把函数作为回调,并向回调中传递额外的参数

function func(a, b, c) {
  console.log(`a => ${a}, b => ${b}, c => ${c}, this.name => ${this.name}`)
}

obj1 = {
  name: 'obj1',
  func: function(a, b, c) {
    console.log(`a => ${a}, b => ${b}, c => ${c}, this.name => ${this.name}`)
  },
}

obj2 = {
  name: 'obj2',
  func: function(a, b, c) {
    console.log(`a => ${a}, b => ${b}, c => ${c}, this.name => ${this.name}`)
  }
}

func.call()                  // 
func.call(obj2, 1, 2)       // a => 1, b => 2, c => undefined, this.name => obj2
func.call(obj2, [1, 2])     // a => 1,2, b => undefined, c => undefined, this.name => obj2

func.apply()               // 
func.apply(obj2, 1, 2)     // error
func.apply(obj2, [1, 2])   // a => 1, b => 2, c => undefined, this.name => obj2

func.bind()                // 返回函数 func
func.bind(obj2, 1, 2)()    // a => 1, b => 2, c => undefined, this.name => obj2
func.bind(obj2, [1, 2])(3)  // a => 1,2, b => 3, c => undefined, this.name => obj2
func.bind(obj2, 1, 2)(3)  // a => 1, b => 2, c => 3, this.name => obj2
举报

相关推荐

0 条评论