call、apply、bind区别

call 、apply、bind各自的特点:

 call  特点:
    1、改变this指向
    2、使用时候函数已被执行
    3、传参时候以逗号的形式分开,一个一个传递     //Fn2.call(上下文环境obj,‘’,‘’)
   
 apply 特点:
   1、改变this指向
   2、使用时候函数已被执行
   3、传参时候必须以一个类数组或数组的形式传递,不然的话会报错    //Fn2.apply(上下文环境obj, [18, 20])

 bind 特点:
   1、改变this指向
   2、返回的是函数本分,函数并没有执行,需要通过事件触发后才会执行,
   3、传参的话和call的形式是一样的,都是通过逗号的形式分割,一个一个传递  //Fn.bind(上下文环境obj, 'username', '20岁')()
   
 如果着三个中上下问环境为null或者undefined的时候,默认就指向了window 比如:函数名.call(null)

使用call改变this指向:

var name = 'react.js'
    var obj = {
        name: 'Vue.js',
        Fn: function () {
            function Fn2() {
                console.log(this.name)
            }
            //如果这里不修改this指向的话,this指向的是window,call谁,this就指向谁
            Fn2.call(obj)
        }
    }
    obj.Fn()

使用apply改变this指向:

 var name = 'react-js'
      var obj = {
          name: 'Vue.js'
      }
      function res(v1, v2) {
          console.log(v1, v2)
          return {
              name: this.name,
              age: v1,
              age2: v2
          }
      }
      //传参时候必须以一个类数组或数组的形式传递,apply谁,this就指向谁。
      var result = res.apply(obj, [18, 20])
      console.log(result)

使用bind改变this指向

var name = 'react.js'
   var obj = {
       name: 'Vue.js'
   }
   function Fn(name, job, age) {
       console.log(arguments)
       return {
           class: this.name,
           user: name,
           job: job,
           age: age
       }
   }
   //传参的话和call的形式是一样的,都是通过逗号的形式分割,一个一个传递,bind谁,this指向谁
   var result = Fn.bind(obj, 'username', '20岁')()
   console.log(result)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值