关于this

关于this

this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。(其实这个说法仍然值得讨论)

function a(){
var user="nannan";
console.log(this.user);//undefined
console.log(this);//window
}
a();

因为this指向的是调用它的对象,这里的函数a实际上是被windo对象所点出来的。
②再看下面这个:

var o={
user:"nannan";
fn:function(){
console.log(this.user);//nannan
}
}
o.fn()

这里当你调用o.fn.时才执行,对象就是指向o;根据谁调用就指向谁的原则,这里this指向的对象就是o;

③再看下面这个:

var o={
user:"nannan";
fn:finction(){
console.log(this.user)//nannan;
}
}
window.o.fn();

这里的this没有指向window,首先我们知道,window是js的全局对象,创建的变量实际上是在给window添加属性,所以这里应该指向wondow.o对象
再看一个:

var o={
q:10;
b:{
q:5,
fn.function(){
console.log(this.q);//5
     }
  }
}
o.b.fn();

这里的对象依然是o,但this却没有执行。
把上面三段代码归结一下,:
①如果一个函数中有this,但是它没有被上一级对象调用,则this依然是指向了window。(不考虑严格版)
②如果一个函数被上一级的对象所调用,那么this指向的就是上一级的对象。
this指向的是它上一级的对象,参考例三。
不管这个函数中包含几个对象,还是被第几层的函数所调用。

再看下面这个

var 0{
a:10;
b:{
    a:5,
    fn:function(){
    console.log(this.a);//undefined
    console.log(this.a);//window
    }
   }
 }
 var j=o.b.fn;.
 j();

这里虽然函数fn是对象b来引用。但是把它赋给j时并没有执行,只是一个赋值所以最终的指向依然是window。即this永远指向最后调用它的对象,它执行的时候要看看是谁调用的。
与例三不同的是,例三有直接执行了fn

构造函数版的this

function Fn(){
   this.user:"nannan";
   }
   var a=new fn();
   console.log(a.user);//nannan

这里的对象a能够点出fn中的user,是因为new关键字就是创建一个对象实例。可以理解成复制了一份fn到对象a里面,但此时仅仅为创建但没有执行,而调用这个函数fn的对象a,则this指向的自然是对象a,对象a中有user是因为用了关键字new相当于复制了一份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值