java与javascript中this的小解

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/javawebty/article/details/70326938

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的小解

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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页