变幻莫测的this指向

一.变幻莫测的this指向

在前端的面试中,this 指向与面向对象是必考题,也是平常开发中绕不开的话题,不少前端
老鸟也会在this 指向这里掉坑。本节课围绕this 指向问题,去分析this 在不一样环境下的不一样指向。javascript

1.透彻认识function 的this 在不一样调用环境下的指向

  1. 事件调用环境谁触发事件,函数里面的this 指向的就是谁。
  2. 全局环境 浏览器非严格模式环境window,严格模式环境undefind node环境module.exports前端

    console.log('全局this',this); // window

    image-20200629123923483.png

  3. 函数内部
    【this 最终指向的是调用它的对象】
    · 普通函数直接调用与window 调用java

    let box = document.querySelector('.box');
        let lili = document.querySelector('.lili');
        box.onclick = move;
        lili.onclick = move;
    
        function move(){
            this.style.left = '100px';
            console.log('事件this', this) // this指向点击元素(box或lili)
        }

    image-20200629123814629.png

    · 对象中的函数直接调用与window 调用node

    var obj ={
            a:10,
            b:function(){
                console.log('tag', this)
            }
        }
        window.obj.b()  // 对象obj
        obj.b()         // 对象obj

image-20200629130246623.png
【函数被多层对象所包含,若是函数被最外层对象调用,this 指向的也只是它上一级的对象】
· 多层对象中的函数的this 指向面试

var obj = {
             a:10,
             b:{
                 fn:function(){
                     console.log(this);
                 }
             }
         }
         window.obj.b.fn();  // 对象b
         obj.b.fn();         // 对象b

image.png

· 对象中的函数被赋值给另外一个变量浏览器

a:10,
             b:{
                 fn:function(){
                     console.log(this);
                 }
             }
         }
         var abc = obj.b.fn;
         abc();              // window
         abc.call(obj);      // 对象obj
![image.png](https://upload-images.jianshu.io/upload_images/17618149-2deeca8a24e3f5b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

【构造函数中的this 指向的是实例对象】app

· 构造函数中的this 指向
   · new 运算符的做用
   【若是构造函数中有return 若是return 的值对象,this 指向返回的对象,若是不
   是对象,则this 指向保持原来的规则,在这里,null 比较特殊】

2.了解箭头函数中的this 指向的特殊性

箭头函数自己是没有this 和arguments 的,在箭头函数中引用this 实际上调用的是定义
是的上一层做用域的this。这里强调一下是上一层做用域,因对对象是不能造成独立的做用
域的。函数

3.掌握如何改变this 指向

call / apply / bindthis

相关文章
相关标签/搜索