zoukankan      html  css  js  c++  java
  • JS中this各种指向小结

    此处分普通函数和箭头函数两种形式展开说明

    01.在定义或调用对象时

    let obj = {
      name: "zhangsan",
      showname() {
        return this.name;
      },
    };
    
    console.log(obj.showname()); //zhangsan

    在对象的方法中,普通函数的this指向的是对象本身;

    let obj = {
      name: "zhangsan",
      showname: () => {
        return this.name;
      },
    };
    
    console.log(obj.showname()); //undefined

    箭头函数指向的是其父级所在作用域的this---windows,打印结果为undefined;

    02.多层函数嵌套的时

    let obj = {
      name: "zhangsan",
      printName: function (times) {
        function start(times) {
          for (let i = 0; i < 4; i++) {
            console.log(this.name);
            //undefined
            //undefined
            //undefined
            //undefined
          }
        }
        start(times);
      },
    };
    
    obj.printName(4);

    此时普通函数指向的是window,所以打印了四次undefined,接下来试试箭头函数;

    let obj = {
      name: "zhangsan",
      printName: function (times) {
        let start = (times) => {
          for (let i = 0; i < times; i++) {
            console.log(this.name);
            //zhangsan
            //zhangsan
            //zhangsan
            //zhangsan
          }
        };
        start(times);
      },
    };
    
    obj.printName(4);

    由于this的父级作用域为printName所在作用域,此时的this指向obj,成功打印出zhangsan;

    3.在事件监听器中:普通函数和箭头函数的表现情况和在对象内类似,普通函数指向的是对象本身而箭头函数指向的是上一层作用域;

    需要注意的是,有些系统提供的方法中,会让我们传如this,例如map和forEach等,下面是MDN的一些说明

  • 相关阅读:
    方格取数+ 传纸条 noip2000 + noip2008 DP
    题解 P1103 【书本整理】
    CF212D 【Cutting a Fence】
    CF339D 【Xenia and Bit Operations】
    旅行 NOIP2018 luogu P5022
    CodeFores 集合
    战略游戏 SDOI2018 圆方树 + 树上倍增求点权和
    树网的核 NOIP 2007 luogu P1099
    P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G
    NOIP 2017 P3959 宝藏 (状态压缩DP板子)
  • 原文地址:https://www.cnblogs.com/dokom666/p/13546145.html
Copyright © 2011-2022 走看看