关于javascript:This指向

30次阅读

共计 1311 个字符,预计需要花费 4 分钟才能阅读完成。

本人来总结一下 js 中的 this,这个 this 的指向始终都是一个很困扰的问题,老是搞不清楚如何来判断这个时候的 this 是指向什么的。咱们要留神 this 的指向并不是在创立的时候决定的,而是在调用的过程中决定的。

首先要阐明的是这里探讨的是非严格模式下的 this 指向,因为在非严格模式下 this 的默认指向是全局对象也就是咱们常说的 window,然而在严格版中,this 的默认指向是 undefined。

通过网上查阅咱们能够看到很多文章对于 this 指向的总结就是实际上 this 的最终指向的是那个调用它的对象,这样的说法去剖析大部分的 this 指向都是没有问题的,然而在有的时候这样去断定 this 的指向就会存在肯定的问题。

function test(){ 
    var name = "5555";
    console.log(this.user); // 后果 undefined
    console.log(this);  // 后果 Window
}
test();

从下面这个例子咱们能够看出,这里因为是全局中也就是 window 调用了这个函数,所以在这个函数里的 this 的指向就是 window,这是合乎下面的说法的。

var test={ 
    name: "5555";
    test1:function(){console.log(this.name);
        console.log(this);
    }
}
test.test1();// 后果 '5555' test
var x=test.test1;
x();// 后果 undefined window

这个例子咱们能更好的去了解那句话:“this 的指向不是创立的时候决定的,而是在调用时决定的”。这里申明 x 的时候并没有调用函数,只是进行了援用,当执行 x()的时候才是真正的执行了这个 test1 外面的函数,因而所谓的调用是指的是在函数执行时的调用,这里是在 window 里执行的这个函数,因而这时 this 的指向天然就是 window。
再看一个例子:

var test={ 
    name : "5555",
    test1:{
        name:'1111',
        test2:function(){console.log(this.name);
            console.log(this);
        }
    }
}
test.test1.test2();

这次的打印是什么呢?这次的 this 指向是什么呢?是 window 还是 test,test1 呢?打印后果是 1111,this 的指向是 test1,这样咱们就能进行一个 this 指向的根本总结了:
this 的指向向就是看它被调用执行时的上一级,如果没有上一级(如这个 this 在函数中,而后全局调用了这个函数)那么它的指向就是 window(非严格模式下),如果存在下级对象那么它的指向就是上一级的这个对象不管里面有多少层对象来调用了。

最初就是在一些非凡的状况下 this 的指向是被扭转了的,有很多扭转 this 的办法这里就不在叙述了。this 在简略的状况下是很好判断指向的,然而在屡次进行指向扭转后,咱们要去确定这个指向就比拟艰难。

参考文献:https://www.cnblogs.com/pssp/…
这篇博客写的十分的简略易懂,尽管没有形容很简单的状况,然而对于根本的 this 指向的总结是很到位的。

正文完
 0