JavaScript 中 This 的指向

199 阅读1分钟

理解this

  • JavaScript是词法作用域(或者说是静态作用域):作用域在函数定义的时候就有了
  • this 是Javascript用来实现动态作用的一种方法,this的指向在函数执行的时候才会确定,谁调用了这个函数this就指向谁。

四种常用的this 指向

  1. 直接调用this--指向window。
  2. 对象方法调用bar.foo()--指向调用该函数的对象,也就是bar。
  3. 用call和apply绑定:foo.call(bar), foo.apply(bar), (二者的区别主要在传参上)。--指向绑定的对象。

这种情况下,绑定可以丢失,也就是可以重新绑定到其他对象。

  1. 使用bind(),可以解决绑定丢失的问题,也就是说该函数不能重新绑定到其他对象。

一些例子

  1. setTimeout: 要注意函数执行的时候才将this绑定到调用函数的对象。如果回调函数是对象的方法,那么setTimeout使得方法内部的this关键字指向全局环境,而不是定义时所在的那个对象。如下,可以将obj.y放入一个匿名函数解决,也可以使用bind
    var x = 1;
    var obj = {
     x: 2,
     y: function () {
    console.log(this.x);
      }
    };
    
    setTimeout(function () {
     obj.y();
    }, 1000);
    // 2
    
  2. jQuery使用中: this指向的是DOM对象还是jQuery对象,注意${this}的使用