js中的this最终指向的是那个调用它的函数[this:谁调用它就指向谁]
一.this指向例子
1.window
<script type="text/javascript">
//01 函数内部的this指向的是window
function aa(){
var men = "leon";
console.log(this.men);//undefined
console.log(this);//window
}
</script>
按照上面我们说的那样,this的最终指向的是调用它的对象,这里的函数aa实际上是最终指向的window,而window里面是没有men的,所以第一个是undefined,第二个则是window。
2.this指向的是对象本身
<script type="text/javascript">
//02 对象内部的this指向的是对象本身
var bb ={
'men':"leon",
fn:function(){
console.log(this.men)//leon
}
}
bb.fn();
</script>
说明:这里的this指向的是对象bb,因为你调用这个fn是通过bb.fn()执行的。所以我们可以说明一点,this的指向在对象创建的时候是决定不了的,在调用的时候才能够决定,谁调用就指向谁。
3.this里a指的是谁
<script type="text/javascript">
var cc = {
a:99,
b:{
a:100,
fn:function(){
console.log(this.a);
}
}
}
cc.b.fn();
</script>
说明:这里的this指向的是对象b里面的a,谁调用就指向谁。
4.三种方法
<script type="text/javascript">
function test(){
alert(this.x);
}
//var o = {};
//o.x = 1;
//o.m = test;
//o.m();//1
// var o = new Object();
// o.x = 1;
// o.m = test;
var o = {
x:1,
m:function(){
alert(this.x)
}
}
o.m()
</script>
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window(但是这里需要说明的是js的严格版中this指向的不再是window,这个问题在这里不谈)
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,this指向的是就是它上一级的对象。
情况3:如果一个函数中有this,这个函数包含多个对象,尽管这个函数是被最外层的对象所调用,this也只是指向的它上一级的元素