this是js中的一个关键字,在不同的场合使用,this的值会发生变化,下面我将详细的介绍this在函数中的各种指向。

  • 在方法中,this表示该方法所属的对象。
  • 如果单独使用,this表示全局对象。
  • 在函数中,this表示全局对象。
  • 在函数的严格模式下,this是未定义的(undefined)。
  • 在事件中,this表示绑定事件的元素对象。
  • 下面实例介绍不同情况下的this(前提是非严格模式下)
//在全局对象中
function fn(){
  var a=123;
  console.log(this.a);//undefined;
  console.log(this);//window
  }
  fn();

上面这个代码你既可以看做函数,也可以看做方法。作为函数,它的this指向是全局变量。作为方法,它是window对象的方法。所以this都是指向window。可能第二种理解会更好。

//在自定义对象中
var obj={
    var a='123';
    fn:function(){
        console.log(this.a);//'123'
        console.log(this);//[Object,Object]
}
}
obj.fn();

上面这个代码是自定义的一个对象,内部的fn是一个方法,所以在方法内部的this当然就是指向对象obj.

//属性是对象时,内部方法的this指向
var obj={
    a:123,
    b:{
        a:456,
        fn:function(){
            console.log(this.a);//456;
        }
    }
}
obj.b.fn();

上面代码中obj对象里面的b属性也是一个对象,则内部的fn方法this指向的是b对象.

  1. 为什么new一个构造函数,this会指向b?首先是new关键字会创建一个空的对象,然后函数会自动调用一个apply方法,将this指向这个空对象,最后将空对象赋给了变量b。
  2. 在严格模式下,默认的this不再是window,而是undefined;
最后修改:2021 年 04 月 20 日 09 : 22 AM
如果觉得我的文章对你有用,请随意赞赏