this指向浅析

2020-10-24  本文已影响0人  肖青荣

一般来说,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用它的对象。
1.全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window

console.log(this);//指向window

 function fn() {
     console.log(this);//指向window

 }
 window.fn();

 window.setTimeout(function() {
     console.log(this);//指向window
 }, 1000);

2.方法调用中谁调用this指向谁

var o = {
            sayHi: function() {
                console.log(this); // this指向的是 o 这个对象

            }
        }
        o.sayHi();

3.构造函数中this指向构造函数的实例

 function Fun() {
            console.log(this); // this 指向的是fun 实例对象

        }

4.如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象

var o = {
    a:10,
    b:{
        fn:function(){
            console.log(this.a); //undefined
        }
    }
}
o.b.fn();

尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西

5.箭头函数中的this引用的是最近作用域里的this,向外层作用域中,一层层查找this, 直到有this的定义

const obj = {
    aaa() {
      setTimeout(function () {
        console.log(this);// 指向window
      })

      setTimeout(() => {
        console.log(this);//指向obj对象
      })
    }
 }
上一篇下一篇

猜你喜欢

热点阅读