标签:
this是javascript的关键字,也是对象,这个对象比较特殊,代表函数运行时自动生成的一个内部对象,只能在函数内部使用,随着函数使用场合的不同,this值会发生变化,但总的原则是不变的,就是this始终指向调用函数的那个对象
this的使用有很多种情形:
情形一:在全局环境下输出this值(这个this就代表当前的Window对象,值为Window)
console.log(this); //Window
情形二:构造函数中的this (所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。)
function Test(){ this.x = 1; } var obj = new Test(); alert(obj.x); // 1
情形三:函数还可以作为某个对象的方法调用,这时this就指这个上级对象
function test(){ alert(this.x); } var obj = {}; //定义一个新对象obj obj.x = 2; //给obj对象定义一个新的属性x,值设为2 obj.m = test; //给obj对象定义一个新的属性m,值设为test,即把函数test赋给属性m,这时m就具备test一样的能力 obj.m(); // 运行obj对象的m方法时,也就执行了 test函数,那么test函数中的this 指的就是调用test函数的对象 obj,所以 得到this.x的值为2
情形四:this所在的函数被A对象调用执行的,那么这时的this 就是指A这个对象(this.x实际上访问的就是指A.x,也就是A对象下的x属性值)
console.log(this); //window this.x = 3; //等同于 var x = 3 function test(){ console.log(this.x); } test(); //3 特别注意 这里的test是被window调用执行的,所以test函数里的this指向 window,那么this就会找window对象也就是全局对象下的x的值 window.test(); //3 全局环境下直接执行函数就是在window下调用具体函数而已,所以test()与 window.test()执行结果一样,这里的this都是值调用test()函数的那个对象即window console.log(x); //3 console.log(window.x); //3
情形五:this在apply()调用时的指向
... ...
标签:
原文地址:http://www.cnblogs.com/rapale/p/5075628.html