this
只能在函数内部使用,原则,this指向一个对象,在函数中调用。this指的是调用函数的那个对象。
可以参考”http://blog.jobbole.com/39305/“
常用的调用情况有下面几种,在使用的时候记住使用的环境进行嵌套就行了 。
1.纯粹的函数调用时,属于全局调用,因此this指向全局window。
function test(){
this.x=1;
alert(this.x);
}
test();//1
为了证明this指向全局对象,以下代码等同于上边:
var x=1;
fucntion test(){
alert(this.x)
}
test();//1
2.当函数作为对象的方法调用时,this指向该对象。
例:var obj= {
x:10,
y:20,
fn:function(){
this.x = 20;
console.log(this)//this指向obj
}
}
fn()
3.当函数作为弹出函数调用时,this指向全局对象(严格模式时,为undefined)
3.作为构造函数中的this时,指向创建该函数的对象
例:function fn1(){
var i = 0 ;
var j = 0 ;
this.x=1;
console.log(this)
}
fn2 = new fn1();
fn2 = function(){
this.y=1;
console.log(this)//this指向fn1
}
fn1(fn2)
4.apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
var x = 0;
function test(){
alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0
嵌套函数中的this不会继承上层函数的this,如果需要,可以用一个变量保存上层函数的this。
再总结的简单点,如果在函数中使用了this,只有在该函数直接
被某对象调用时,该this才指向该对象。正常函数的调用,this
指的是window,特殊函数的调用,this指象对象。函数声明、
匿名函数和函数表达式在全局中调用 this指向window
