this

作者: 木木_bfe8 | 来源:发表于2018-05-09 13:40 被阅读0次

    //内容来自其他博客,自己借鉴学习用。

    //this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象

    function a(){

        var user = "find me";

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

    }

    a();

    打印undefined,原因看上面的注释

    var o = {

        user:"find me",

        fn:function(){

            console.log(this.user);  //find me

        }

    }

    o.fn();

    //这里的this指向的是对象o,因为你调用这个fn是通过o.fn()执行的,那自然指向就是对象o,这里再次强调一点,this的指向在函数创建的时候是决定不了的,

    //在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。

    var o = {

        a:10,

        b:{

            a:12,

            fn:function(){

                console.log(this.a); //12

            }

        }

    }

    o.b.fn();

    //情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。

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

    //情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象.,如果不相信,那么接下来我们继续看几个例子。

    构造函数版this

    function Fn(){

        this.user = "find me";

    }

    var a = new Fn();

    console.log(a.user); //find me

    //这里之所以对象a可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象a,为什么我说a是对象,因为用了new关键字就是创建一个对象实例,

    //我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,

    //那么this指向的自然是对象a,那么为什么对象a中会有user,因为你已经复制了一份Fn函数到对象a中,用了new关键字就等同于复制了一份。

    function fn() 

        this.user = 'find me'; 

        return {}; 

    }

    var a = new fn; 

    console.log(a.user); //undefined

    function fn() 

        this.user = 'find me'; 

        return function(){};

    }

    var a = new fn; 

    console.log(a.user); //undefined

    function fn() 

        this.user = 'find me'; 

        return 1;

    }

    var a = new fn; 

    console.log(a.user); //find me

    function fn() 

        this.user = 'find me'; 

        return undefined;

    }

    var a = new fn; 

    console.log(a.user); //find me

    //如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

    相关文章

      网友评论

          本文标题:this

          本文链接:https://www.haomeiwen.com/subject/etbnrftx.html