js call()、apply()、bind()的用法及区别

15 篇文章 1 订阅

call()

call() 方法第一个参数是作为函数上下文的对象,后面传入的是一个参数列表,而不是单个数组。

语法:
call(obj,args)

实例:

  var name = '张三', age = 13;
  var obj = {
    name: '李四',
    objAge: this.age,
    fun: function (c, t) {
      console.log(`${this.name} 今年${this.age}岁 来自${c} 要去${t}旅游`)
    }
  }
  var obj2 = {
    name: '王五',
    age: 15
  }

  obj.fun.call(obj2, '北京', '上海')  // 王五 今年15岁 来自北京 要去上海旅游

apply()

apply() 方法第一个参数也是做为函数上下文的对象,但是后面传入的是一个函数参数组成数组。

语法:
apply(obj,[arg1,arg2])

实例:

var name = '张三', age = 13;
  var obj = {
    name: '李四',
    objAge: this.age,
    fun: function (c, t) {
      console.log(`${this.name} 今年${this.age}岁 来自${c} 要去${t}旅游`)
    }
  }
  var obj2 = {
    name: '王五',
    age: 15
  }

  obj.fun.call(obj2, '北京', '上海')  // 王五 今年15岁 来自北京 要去上海旅游

bind()

bind() 方法会创建一个新函数,当这个新函数被调用时,它的 this 值是传递给 bind() 的第一个参数, 它的参数是 bind() 的其他参数和其原本的参数。

语法:
bind(thisArg[, arg1[, arg2[, ...]]])

实例:

  	var name = '张三', age = 13;
  	var obj = {
    name: '李四',
    objAge: this.age,
    fun: function (c, t) {
      console.log(`${this.name} 今年${this.age}岁 来自${c} 要去${t}旅游`)
    }
  }
  var obj2 = {
    name: '王五',
    age: 15
  }
  obj.fun.bind(obj2, '北京', '上海')()  // 王五 今年15岁 来自北京 要去上海旅游

从上面的例子可以看出来,call()、apply()、和bind()方法的第一个参数都是this指向的对象。call()和bind()方法使用时传入的参数都是参数列表,call()和bind()方法的不同点是bind()方法返回的一个函数,apply()方法不同传入的参数是数组。
当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值