this对象的指向

2018-11-02  本文已影响0人  刘越姐姐啊

一般来说,this的指向是指谁调用的方法this就是指向谁(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在理解this的时候会有种琢磨不透的感觉

例子1:

function a(){

   var obj="哈哈哈";

   console.log(this.obj);//undefined

   console.log(this);//window

}

a();

按照上面的说法这里的this最终指向的是调用它的对象,由于这里的函数a是被window对象调用的,所以 console.log(this)的时候打印出window,而 console.log(this.obj)的时候由于obj参数只存在于函数a里面,而window下并没有obj参数,所以打印出来是undefined

function a(){

   var obj="哈哈哈";

    console.log(this.obj); //undefined

    console.log(this);  //Window

}

window.a();

这段代码就可以看出来和上面的代码的执行结果是一样的。

例子2:

var o = {

    obj:"哈哈哈",

    fn:function(){

        console.log(this.obj);//哈哈哈 

     }

}

o.fn();

还是通过上面的结论,由于函数fn是通过o.fn()执行的,那自然指向就是对象o,而对象o中确实是存在obj的,所以打印出来就是对象o里面的obj的内容也就是‘哈哈哈’,同时从这里我们也能看出来,this的指向在函数创建的时候是决定不了的,只有在函数调用的时候才能决定,谁调用的就指向谁,这一点是很重要的,一定要记住。

但是要搞清楚this还要看接下来的几个例子:

例子3:

var o = {

    obj:"哈哈哈",

    fn:function(){

        console.log(this.obj);//哈哈哈 

     }

}

window.o.fn();

例子3几乎和例子2是一样的,只是最后一句在调用函数的时候不太相同,但是通过打印的结果可以看出来,这里的this指向的还是对象o,如果按照一开始的理论,this指向的调用它的对象,那这里应该是指向window对象,为什么没有呢???(ps:window是js中的全局对象,我们创建的变量实际上是给window添加属性,所以这里可以用window.o.fn来调用函数)

在解释这为什么不指向window之前,我们再来看一段代码:

var o = {

    a:10,

     b:{

            a:20;

            fn:function(){

                      console.log(this.obj);//20

             }

        }

}

o.b.fn();

这里同样是对象o调用的函数fn,但是同样的,this对象也没有指向o,而是指向对象b,是因为我们一开始说的谁调用的方法this就是指向谁是错误的吗,其实也不是,只是说的不准确,所以要对这个结论进行补充,才能彻底的理解this的指向问题。

情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window。

情况2:如果一个函数中有this,这个函数有被上一级函数所调用,那么this指向的就是上一级的对象。

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

所以这也就解释了上面的例子3,在例子3中,虽然最后一句是window.o.fn(),看上去是window调用的fn,但是实际上this对象并不指向window而是指向函数fn的上一级的对象o。下面这个例子就是一个很好的证明。

var o = {

    a:10,

     b:{

           // a:20;

            fn:function(){

                      console.log(this.obj);//undefined

             }

        }

}

o.b.fn();

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

上一篇下一篇

猜你喜欢

热点阅读