java与javascript中this的小解

java中的this其实指向是十分清晰的,可以分为如下的情况

1.在类的内部直接使用 this

public class Test(){
    Test(){
    }
    public void a(){
    }
    public void b(){
       this.a();
    }
}

此时这个this 指向的就是这个类的实例(是实例,而不是该类)本身。因为this 表示的是实例本身,所以它是随着实例的创建而存在的,在实例未创建的时候,this 其实是不存在的,所以这就是为什么static 方法中不能使用this 的原因

2.ClassName.this

public class Test() extends SuperTest{
    Test(){
    }
    public void a(){
    }
    public void b(){
       this.a();
       SuperTest.this.c();
    }
}

这里的this 其实和1中的没有什么不同,为什么在ClassName后面使用, 因为这样表示这个this 表示的是该Class的实例(上代码中 SuperTest.this 的 this 表示的是SuperTest 实例的) 其实这个的用法的,可以与super相同 即 super == SuperTest.this 这里 SuperTest 必须是 Test 的直接父类

3.this()

public class Test() extends SuperTest{
    Test(){
      this(1);
    }
    Test(int a){
    }
    public void a(){
    }
    public void b(){
       this.a();
       SuperTest.this.c();
    }
}

这里的this直接作为构造器使用,究其原因其实还是因为this代表的是这个实例本身。不同的构造器都只是属于本身的特殊的方法而已。

JavaScript中的this

这里的 this 比较会让人疑惑,但是只要记住两点就是十分的清晰

  1. 方法中的this都是指向调用者。
  2. 任何直接暴露在window中的对象,window都是其隐式的调用对象。
var a = {
   b:function(){
     console.log(this);
   }
}
a.b();//console.log ---->a
var bb = a.b;
bb();//console.log ---->window

为什么?如何判断?其实很简单 根据 上面的 1,2就可以很简单的判断出,如下

var window.a = {
   b:function(){
     console.log(this);
   }
}
window.a.b();//console.log ---->a
var window.bb = a.b;
window.bb();//console.log ---->window

明了简单,另外立即执行的匿名函数中的this都是window 为什么?请看2的判断就知道了。

以上就是java与JavaScript中this的小解

如果有异议,或者不懂的,请给我评论,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值