js中this的指向以及改变this指向的方法

一、全局环境 this—>window

<script>
    console.log(this)   //window
</script>

二、函数作用域中的this  this—>调用者

直接调用全局函数fun(),实际上是window.fun()的简写,调用者是window

<script>
    //全局环境下的函数
    function fun(){
        console.log(this)
    }

    fun()        //window
</script>

对象调用函数时,this指向.前面的对象

<script>
    //一层嵌套
    let obj = {
        f:function(){
            console.log(this)
        }    
    }

    obj.f()                  //obj

    //两层嵌套
    let obj2 = {
        innerObj:{
            f:function(){
                console.log(this)
            }
        }
    }

    obj2.innerObj.f()        //innerObj
</script>

三、箭头函数

普通函数是执行的时候进行绑定,箭头函数是声明的时候就绑定

1.最外层没有函数包裹,那就是在全局作用域下

  console.log(this)        //window
  
  //找声明时的最外层函数作用域
  //最外层没有函数包裹,那就是在全局作用域下  
  let obj = {
    obj1:{
      obj2:{
        fun1:function(){
          console.log(this);
        },
        fun2:()=>{
          console.log(this);
        }
      }
    }
  }

  obj.obj1.obj2.fun1()     //obj2
  obj.obj1.obj2.fun2()     //window

2.有函数包裹,this就是当前函数的this

 let obj = {
    obj1:{
      obj2:{
        
        fun1:function(){
          return ()=>{
            console.log(this);
          }
        },
        
      }
    }
 }

 obj.obj1.obj2.fun1()()        //obj2

四、改变this指向的方法

1.apply 参数以数组形式写 改变完立即执行一次

obj.fun.apply(this新指向对象,['参数1','参数2'])

2.call  参数用逗号分隔 改变完立即执行一次

obj.fun.call(this新指向对象,'参数1','参数2')

3.bind 参数用逗号分隔 改变完不会立即执行

obj.fun.bind(this新指向对象,'参数1','参数2')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值