this

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

//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还是指向函数的实例。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上...
    Mr__王阅读 4,010评论 0 3
  • 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上...
    web蜗牛阅读 3,627评论 1 4
  • 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁...
    马里奥Joseph阅读 2,701评论 0 3
  • 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上...
    sunnyghx阅读 1,580评论 1 0
  • 大家好,我是IT修真院成都分院第09期学员。今天分享的内容是js中this的用法? 1.背景介绍 JavaScri...
    我要夏天_11ec阅读 3,283评论 0 0

友情链接更多精彩内容