函数this指向

var o={
  a:10,
  b:{
    a:12,
    fn:function () {
      console.log(this.a);//12
    }
  }
};
o.b.fn();//调用对象

我们都知道函数this的指向是调用它的对象(就近的对象)

对象 b 里面有 a 这个属性。那么当我们调用对象属性 a 的值是12而不是10;那么这个this的指向就是 b 这个对象,而不是o这个对象---------------注意点  this指向最后调用它的对象。

 

  var o={
      a:10,
      b:{
        //a:12,
        fn:function () {
          console.log(this.a);//undefined
        }
      }
    };
    o.b.fn();//调用对象

 

当我们注释掉 b 里面 a 的值会发现this.a的值是undefined?

因为js是一门动态类型的语言,当我们我们对象点(.)一个属性的时候那么这个属性就有了,如果没有赋值就是undefined。

通过上面我们知道不管对象里面有没有属性a,这个this的指向也是对象 b 因为this总是指向它上一级的调用它的对象。

 

看重点:重要重要重要

var a = 5;
var o = {
  a: 10,
  b: {
    a: 12,
    fn: function () {
      console.log(this.a);//5
    }
  }
};
var j = o.b.fn;//把函数fn赋值给变量j
j();//调用函数fn

这里的属性 a 的值是5,而不是10和12,并且this的指向是window对象。为什么?

你没有理解一句话,这句话非常最重要。this的指向是最后调用它的对象,就是看它执行的时候是谁在调用,在当前例子里面虽然fn函数是被对象 b 所引用但并没有调用,而是把引用的函数fn给了全局变量 j 。然后 j 去调用了函数所以this的指向是window,那么 a 的值为什么是5的原因了。

扩展一下

函数调用:函数名();--------函数名+()

本人小白学习 javascript 与 php 请大家多多关注有更多的本人学习的心得分享出来 ! 大家多多支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值