浅谈js中的this

来源:互联网 发布:cisco mac acl 编辑:程序博客网 时间:2024/06/07 19:42

相信很多刚刚学习js的新手都会有同感,当看一段js代码时,发现里面有很多this,但是这些this到底是指向哪里却没有那么清楚,为了搞清楚这些this到底是什么情况,特地花点时间总结如下几点:

1.最普遍的this表示全局对象

 // 1.this表示全局对象    var x = 1    function test1(){        this.x = 2;        console.log(this.x);    }    test1();//输出为2

解析:设置全局变量x初始值为1,当调用函数test1()之后改变全局变量x的初始化值,故为2

2.对象方法中的this(这里this就指这个上级对象)
例1:

  var name = "全局this";    var object = {        name : "对象中this",        getNameFunc : function(){            return function(){                return this.name;            };        }    };    console.log(object.getNameFunc()());//输出:全局this

例2:

 var name = "全局this";    var object = {        name : "对象中this",        getNameFunc : function(){            var that = this;            return function(){                return that.name;            };        }    };    console.log(object.getNameFunc()());//输出:对象中this

例3

 var name = "全局this";    var object = {        name : "对象中this",        getNameFunc : function(){            var that = this;            return function(){                return that.name+","+this.name;            };        }    };    console.log(object.getNameFunc()());//输出:对象中this,全局this

例4

function test2(){       console.log(this.y);   }    var obj = {};    obj.y = 2;    obj.func= test2;    obj.func();//输出2

解析:例1中,直接this调用全局,而在例2中this表示函数的上一级对象,故此时的this是对象object;在例4中test2函数被赋值给对象obj,所以此时的this表示对象obj

3.构造函数调用(实际上也可以理解成是一个对象,跟2中一样)

 var a = 1;     function test3(){         this.a = 2;     }     var gz = new test3();     console.log(a);//输出1     console.log(this.a);//输出1    console.log(gz.a);//输出2

解析:当new test3()弄成一个新的对象的时候,test3里面的this指向的是gz,所有全局变量没有变化

原创粉丝点击