call,apply,bind

call,apply,bind

  • call,apply,bind这三个主要作用都是改变this指向的,但是使用的时候会有区别。
  var msg = 'hello'
  var obj = {
    msg : 'vue.js'
  }

  function fn () {
    // 当前this指向的是全局window
    return this.msg
  }

  var res = fn()
  console.log(res) //输出结果为hello
 

1、通过call来改变this的指向

      var msg = 'hello'
	  var obj = {
	    msg : 'vue.js'
	  }
	
	  function fn (参数1) {
	    // 当前this指向的则是obj对象
	    return this.msg
	  }
	
	  var res = fn.call(obj) // 当前this指向obj
	  // fn.call(上下文环境,'参数1')
	  // call谁,this就指向谁,后面可以跟随参数进行传参
	  
	  console.log(res)  // 当前输出为vue.js

2、通过apply来改变this的指向

  var msg = 'hello'
  var obj = {
    msg : 'vue.js'
  }

  function fn (val,val2) {
    // 当前this指向的是obj
    return this.msg
  }

  var res = fn.apply(obj,['传参','传参2']) // 当前this指向obj
   // fn.apply(上下文环境,['传参','传参2'])
   // apply谁,this就指向谁,后面以数组的形式进行传参
  console.log(res) // 当前输出为vue.js
  • call和apply的主要区别是在传递参数上不同,call后面传递的参数是以逗号形式分开的,apply传递的参数是数组形式,

3、通过bind来改变this的指向

  var msg = 'hello'
  var obj = {
    msg : 'vue.js'
  }

  function fn () {
    return this.msg
  }

  var res = fn.bind(obj,'传参111','传参222')
 console.log(res) //当前输入为一个函数		ƒ fn () {
																		return this.msg
																	}
  // 必须在后面加括号调用才可以
  // bind格式:函数名.bind(上下文环境,参数)
  
  var res = fn.bind(obj,'传参111','传参222')()
  
  console.log(res) // 当前输出为vue.js
  • bind返回的是一个函数形式,如果要执行,则后面要再加一个小括号。例如:bing(obj,参数1,参数2)(),bind只能以逗号分隔形式,不能是数组形式

@ cc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值