前端关于一些this的问题

第一种情况: this它指向的window本身

var sum=10;
        function fn1() {
          
   
//           全局变量就是window的属性,而this在这里就是window。
//            因此this.sum就是window.sum,也就是sum全局变量
//            console.log(this.sum);
        }
//        console.log(this);

        /*var status=5;
        console.log(typeof status);*/
        fn1();

第二种情况: this它指向事件函数本身

/*
*   所有事件函数中的this,都是这个监听事件监听对象
*  在事件函数中this===e.currentTarget也就是事件侦听的对象
*
*
* */
document.querySelector(".div0").onclick=function (e) {
          
   
    console.log(this);
    console.log(e.target);
    console.log(e.currentTarget);
};

第三种情况:this它指向对象本身

在对象函数中如果需要调用当前对象的其他函数或者属性时 必须加this.属性名 或者 this.方法名

/*
*
*  对象中的this
*  this就是当前这个对象
*  在对象的函数中,如果需要调用当前对象的其他函数或者属性时
*  必须加this.属性名或者this.方法名
*
* */
    var obj =  {
          
   
      a:1,
      c:function(){
          
   
        console.log(this.a);
      }
    };

ES5和ES6的面向对象

/*
        *
        *   下面两种是ES5和ES6的面向对象
        *    类中描述的this,都是实例化后的对象
        *
        *
        * */
//        ES5

ES5:

function Box(d) {
          
   
      this.d = d;
    }
    Box.prototype = {
          
   
      a: 1,
      c: function() {
          
   
        //这里的this就是box1
        console.log(this.a + this.d);
      }
    };
    var box1 = new Box(10);
    box1.c();

ES6:

class Ball {
          
   
  constructor(d) {
          
   
    this.d = d;
    this.a = 1;
  }
  c() {
          
   
    console.log(this.d + this.a);
  }
}
var ball1 = new Ball (10);
ball1.c();

第四种情况修改替换this的改变——call、apply、bind替换中的this

这里的this就是被替换的对象

/*
*
* call、apply、bind替换的this
* 这里的this就是被替换的对象
* 他们都是用来修改this的指向
*call、apply 基本没什么区别 只不过他们接受的第二个参数有些不同而已
      call接受的是单独参数
      apply接受的是数组
      而bind 通常是给函数修改this指向的 通常我们在react当中会大量的使用.bing的方法来修改this的指向        
* */

第五种情况使用箭头函数修改this

要注意的是箭头函数本身是没有this的 它捕获的是上下文的this指向来调用 当你在用箭头函数中使用call、apply、bind 方法是无法改变this的指向的。

this.$nextTick(() => {
          
   
      this.getRecord();
    });

上面这个函数是实际vue开发当中遇见的一个bug,然后用了在created中获取不到修改的参数 然而也可以在 mounted(){} ,周期里获取到 就只是想偷个懒。但是尽量的使用对应的周期函数去做组件的该做的事情。 https://blog..net/HarryHY/article/details/99311838 good good study ,day day up

经验分享 程序员 微信小程序 职场和发展