首页 > 编程 > JavaScript > 正文

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

2019-11-08 01:45:24
字体:
来源:转载
供稿:网友

今天回顾了一下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);    };    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里自带的

总结一下:

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表