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
比较会让人疑惑,但是只要记住两点就是十分的清晰
- 方法中的this都是指向调用者。
- 任何直接暴露在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的小解
如果有异议,或者不懂的,请给我评论,谢谢!