This指针指向问题

This指针指向问题

js中的this最终指向的是那个调用它的函数[this:谁调用它就指向谁]

首先看一下接下来的例子

function aa(){

            var men = "leon";

            console.log(this.men);//undefined

            console.log(this);//window

}

aa();

按照上面我们说的那样,this的最终指向的是调用它的对象,这里的函数aa实际上是最终指向的window,而window里面是没有men的,所以第一个是undefined,第二个则是window。

var bb ={

'men' : "leon",

 fn:function(){

 console.log(this.men)//leon

}

 }

bb.fn();

说明:这里的this指向的是对象bb,因为你调用这个fn是通过bb.fn()执行的。所以我们可以说明一点,this的指向在对象创建的时候是决定不了的,在调用的时候才能够决定,谁调用就指向谁。

var bb ={

'men' : "leon",

 fn:function(){

      console.log(this.men)//leon

}

}

window.bb.fn();

例子1:

var name="The window";

var object={

name:"My object",

getNameFunc:function(){ //递归

return function(){

return this.name;

}

}

}

alert(object.getNameFunc()());

This在找到一个变量的同时就不会往下找

例子2

var name="The window";

var object={

name:"My object",

getNameFunc:function(){ //递归

var that=this;

return function (){

return that.name;

}

}

}

alert(object.getNameFunc()());

说明: 
window是js中的全局对象,我们创建的变量实际上是给window添加属性,而一般情况我们经常省略window,所以这里可以用window.bb
例子3和例子2的代码执行结果是一样的,但是这里this为什么不指向window呢?

var cc = {

 a:99,

     b:{

 a:100,

fn:function(){

 console.log(this.a);//100

 }

 }

 }

 cc.b.fn();

这里的函数是由最外层的cc点出来的,但是this和上面一样并没有执行它,而是最终指向的b;所以我们可以推翻一开始说的那句话,并且总结如下

情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window(但是这里需要说明的是js的严格版中this指向的不再是window,这个问题在这里不谈)

情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,this指向的是就是它上一级的对象。

情况3:如果一个函数中有this,这个函数包含多个对象,尽管这个函数是被最外层的对象所调用,this也只是指向的它上一级的元素

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值