关于javascript:This指向

本人来总结一下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指向的总结是很到位的。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理