javascript中this的理解使用

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()调用时的指向

... ...

原文地址:https://www.cnblogs.com/rapale/p/5075628.html