zoukankan      html  css  js  c++  java
  • this指向知识梳理

     function的this在不同环境下调用的指向

    1.事件调用环境

         谁调用事件,this就指向谁

    <body>
        <div class="boxs"></div>
    </body>
    </html>
    <script>
        let b = document.querySelector(".boxs")
        function a(){
            console.log(this)
        }
        b.onclick = a // <div class="boxs"></div>
    </script>

    2.全局环境下

    //在浏览器环境中
    <script> console.log(this) // window </script>
    //在node环境中
    consple.log(this)//{}
    console.log(this=== module.exports) //true
    所以指向的是导出的那个对象

    3.在函数内部环境


    <script>
    //this最终指向的是调用他的对象 function a(){ console.log(this) } a() //在非严格模式下指向的是window 在严格模式下指向的是undefined //严格模式下调用 window.a()
    //函数被多层对象调用,this只指向他的上一级对象   var obj = { a:10, b:function(){ console.log(this) } } obj.b()//obj window.obj.b()//obj </script>

    4.在构造函数中

    //没有return的构造函数  
    function fn(){ this.num = 10 console.log(this) } var obj = new fn()
      console.log(obj.num)//fn{num:10} 

    //1.调用函数

    //2.自动在函数内部创建一个对象

    //3.将这对象和这个构造函数绑定

    //4.如果构造函数没有返回值,隐式返回this对象

    function fn(){
            this.num = 10
            console.log(this)
         return ''  {}  []
         }
    var obj = new fn() 
    console.log(obj.num)//fn{num:10} undefined undefined

    如果构造函数中return的是一个对象或者数组,this指向返回的对象,如果不是,this指向这个构造函数,null比较特殊

    5.箭头函数中

     function a(){
            setTimeout(function(){
                console.log(this) //这里的this指向window
            },1000)
            setTimeout(()=>{
                console.log(this)  //这里的this指向上一级作用域的this
            },1000)
            
        }
        a()
    

    6.修改this指向

    let b = document.querySelector(".boxs")
        var obj = {
            a:1,
            fn:function(){
                console.log(this)
            }
        } 
       obj.fn.call(b,a,s,d) //第一个参数调用的对象,后面的对象
       obj.fn.apply(b,[a,s,d]) //第一个参数调用的对象,第二个参数是数组
       obj.fn.bind(b) //这样并没有调用只是改变了this指向
       
    

      

  • 相关阅读:
    OnEraseBkgnd、OnPaint与画面重绘
    .编译ADO类DLL时报错的解决方案
    VC列表框样式
    Codeforces 131D. Subway 寻找环树的最短路径
    Codeforces 103B. Cthulhu 寻找奈亚子
    Codeforces 246D. Colorful Graph
    Codeforces 278C. Learning Languages 图的遍历
    Codeforces 217A. Ice Skating 搜索
    Codeforces 107A. Dorm Water Supply 搜图
    Codeforces 263 D. Cycle in Graph 环
  • 原文地址:https://www.cnblogs.com/xiaohuohuai/p/13584189.html
Copyright © 2011-2022 走看看