改变this指向的方法

JavaScript中允许指定函数中this的指向

① call()

② apply()

③ bind()

1、call()方法,传递的是普通参数

使用call方法调用函数,同时指定被调用函数中this的值

基础语法 :fn.call(thisArg, x, y, z, ....)

script>
    const obj = {
      name: '张三'
    }

    function fn() {
      console.log(this) //{name: '张三'}
    }

    // call()方法中第一个参数是指定的this,其余是实参,传递的参数
    // 这里将this指向了obj
    fn.call(obj, 1, 2)
  </script>

2、apply()方法,传递的参数必须是数组

使用 apply 方法调用函数,同时指定被调用函数中 this 的值
基础语法 :fn.apply( thisArg,  [数组] )
<script>
   function fn(x, y) {
     return x + y
   }
   const num = fn.apply(null, [1, 2])
   console.log(num)  //3

  //  apply方法主要跟数组有关系,比如使用Math.max()求数组最大值和最小值
  const arr = [1, 5, 14, 2]
  const max = Math.max.apply(null, arr)  //利用apply方法
  const max2 = Math.max(...arr)  //利用展开运算符
  console.log(max, max2) //14 14  
  
  </script>

3、bind()方法

bind()方法不会调用函数,但是也能改变函数内部this的指向

当我们只想改变this的指向,并不想调用函数的时候,可以使用bind()方法 ,比如改变定时器内部的this指向

基础语法 :fn.bind( thisArg,  x,  y,  z, ....)

  <script>
    const obj = {
      uname: '张三'
    }
    
    // 普通函数
    function fn() {
      console.log(this);
    }
  //  bind不会调用函数
  //  能改变this的值
  //  返回的值是一个函数
   const fun = fn.bind(obj)
  // 调用改变了this指向后的函数
   fun() //{uname: '张三'}
   
  </script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值