java中this用法和javascript中的this用法

来源:互联网 发布:python 2.x.msi 编辑:程序博客网 时间:2024/05/24 05:11

今天回顾了一下java基础,突然发现自己把java和JavaScript中this的概念混淆了,所以记录一下以备不时之需

java:

1.this它可以在类里面来引用这个类的属性和方法

代码:

public class Test {
    private int x = 10;
    public Test(int x){
        System.out.println("赋值前的全局变量"+this.x);
        System.out.println("形参x="+x);
        this.x = x;
        System.out.println("赋值后的全局变量"+this.x);
    }
    public static void main(String[] args) {
        Test t = new Test(11);
    }

}

结果:

赋值前的全局变量10
形参x=11
赋值后的全局变量11


2.通过this 这个关键字返回自身这个对象

代码:

public class ThisDemo {
    private int count ;   //全局变量Java虚拟机都会先自动给它初始化为默认值。 而局部变量不行
    public ThisDemo add(){
        count++;
        return this;
    }
    public void print(){
        System.out.println("count="+count);
    }
    public static void main(String[] args) {
        new ThisDemo().add().add().print();
    }
}
结果:count=2

其中初始化赋值如下

             Boolean      false
             Char           '\u0000'(null)
             byte            (byte)0
             short           (short)0
             int               0
             long            0L
             float            0.0f
             double        0.0d

3.构造函数之间的调用

代码:

public class ThisDemo {
    String name ;
    int age ;
    public ThisDemo(){
        this.age = 21;
    }
    public ThisDemo(String name,int age){
        this();函数有所属对象时:指向所属对象函数有所属对象时:指向所属对象
        this.name = name;
    }
    
    public void print(){
        System.out.println("赋值后的名字"+this.name);
        System.out.println("赋值后的年龄"+this.age);
    }
    public static void main(String[] args) {
        new ThisDemo("桂纶镁",23).print();
    }
}

结果:

赋值后的名字桂纶镁
赋值后的年龄21

javascrip:

1.函数有所属对象时:指向所属对象

代码:

    var myObject = {
        value : 10
    };
    myObject.fun = function(){
        var value = 100;
        alert(value);
        alert(this.value);
        alert(this);   //这里的this指的是调用他的对象(myObject),如果没有写在myObject里面的话调用他的则是window
    };
    myObject.fun();

结果:100

         10

         Object

2.函数没有所属对象:指向全局对象(将上述代码进行小小的改动)

代码:

var myObject = {
        value : 10
    };
    myObject.fun = function(){
        fun1 = function(){
            alert("fun1:"+this.value);
        }
        var value = 100;
        alert(value);
        alert(this.value);
        alert(this);
    };
    myObject.fun();
    fun1();

结果:

100

10

Object

fun1:undefined

分析:

因为fun1()这个函数没有绑定在任何一个对象上,所以它属于window这个对象,所以它的this指的是全局变量,而全局变量没有这个value

所以就为undefined

3.构造器中的 this:指向新对象

代码:

var value = 10 ;
fun = function(){
    var value = 100;
    alert(this.value);
    alert(value);
}
fun();
var f = new fun();

结果:

10

100

undefined

100

分析:我用了两次调用来区分new一个函数和普通函数的区别,很明显,当我new一个函数的时候,这时他所属的对象是f,而f没有value这个值,所以它的this.value为undefined


既然都是作用域,就扩展一下说一下apply()和call()的异同

相同点:两个方法产生的作用是完全一样的。

不同点:方法传递的参数不同

function A(){
    this.flag = 'A';
    this.tip = function(){
        alert(this.flag);
    };
};
function B(){
    this.flag = 'B';
};
var a = new A();
var b = new B();
a.tip.call(b);

a.tip.apply(b);

两次运行结果都是B,注意这里tip是属性所带的方法,之前写错了看很久才发现,apply()和call()都是function.prototype里自带的

想让window调用的话这里可以写apply(null)或者apply(window)


总结一下:

java中this.value可以再本类中调用全局变量,也可以在构造器中用this()调用其他构造器,也可以用this表示当前对象

JavaScript中this指的是这个函数所属的对象的值,当new一个函数时,这个this就会指向这个new出来的对象,apply()和call()可以改变一个函数中this指向的对象

没有var的变量都代表的是全局变量哟

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3岁宝宝乳牙腐蚀怎么办 三岁宝宝烂牙怎么办 宝宝牙被腐蚀了怎么办 嗓子声音变粗了怎么办 玩网游钱被骗了怎么办 家里的白墙脏了怎么办 月经弄到床垫上怎么办 出租房墙面太脏怎么办 苹果6镜头模糊了怎么办 6s前摄像头进灰怎么办 手机镜头进灰了怎么办 6s摄像头进灰了怎么办 7plus摄像头进灰怎么办 苹果喇叭进灰了怎么办 苹果7摄像头进灰怎么办 锁眼里胶水堵了 怎么办 锁眼被牙签堵了怎么办 锁孔被胶水堵了怎么办 快手上不了同城怎么办 昌珉入伍宋茜怎么办 嗓子里卡了鱼刺怎么办 在餐厅吃到虫子怎么办 在餐厅吃出虫子怎么办 孕妇被虫子咬了怎么办 吃外卖吃到虫子怎么办 杯子盖拧错位了怎么办 身边有吸毒的人怎么办 如果牛难产了怎么办要 牛难产拉不出来怎么办 老公发现老婆有外遇怎么办 睡眠不好半夜老是醒怎么办 拔完智齿肿了怎么办 拔牙后咽口水疼怎么办 吃了脏东西拉肚子怎么办 微信遇到仙人跳怎么办 牙有裂痕疼应该怎么办 胸罩在学校掉了怎么办 锁屏密码忘记了怎么办 中汇支付不到账怎么办 痘痘毁容烂脸怎么办 我的手机掉了怎么办