黑马程序员技术交流社区

标题: this怎么调用的 [打印本页]

作者: GGdog    时间: 2014-4-27 16:28
标题: this怎么调用的
本帖最后由 GGdog 于 2014-4-28 00:01 编辑
  1. class ThisTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new ThisTest(3L);
  6.         }
  7.         public ThisTest(long x)
  8.         {
  9.                 this ((int) x);
  10.                 System.out.println("a");
  11.         }
  12.         public ThisTest(int x)
  13.         {
  14.                 this();
  15.                 System.out.println("b");
  16.         }
  17.         public ThisTest()
  18.         {
  19.                 System.out.println("c");
  20.         }
  21. }
复制代码
这个不是很清楚,想问问这个顺序的问题

作者: 菜小徐    时间: 2014-4-27 16:36
1-->2-->3-->4
1、new ThisTest(3L);创建本类对象,而创建对象一定会调用对象的构造方法,否则无法创建。
2、调用public ThisTest(long x)构造方法,构造方法中this ((int) x);this表示本类,所以也相当于调用ThisTest(int x)
3、调用public ThisTest(int x),与上同理,调用ThisTest()
4、ThisTest()执行完毕之后,再返回执行 ThisTest(int x)的System语句,之后同理
作者: a3330682    时间: 2014-4-27 16:58
this代表本类对象,你把它想象成本类对象就可以了!
作者: 余琪琪    时间: 2014-4-27 17:12
亲,你都按照顺序写了,还不知道,你写的,上面都是调用下面一个的!主要就是看调用方法的参数,和this语句里的参数,就明白了!
作者: 136616244    时间: 2014-4-27 21:16
this:1,必须位于构造方法中的第一句类调用本类中的其他构造方法,
  2,只能在构造方法中用this调用其他构造方法,而不能再其他人方法中用this调用构造方法
  3.必须通过this语句来调用构造方法,而不能直接通过方法名调用!
三。子类的构造方法需要调用父类的构造方法吗?
是的,子类必须要先调用父类的构造方法,从而保证父类的成员变量和成员方法被继承!
super:是指直接父类对象的引用!
     1,子类的构造方法必须调用父类的构造方法
     2,子类的构造方法调用父类的构造方法必须位于第一句。
     3,调用父类的构造方法必须用super()或者super(param)带参数,
     4,如果在子类的构造方法中没有显示的调用父类的构造方法,系统默认会在子类的构造方法中加上super();如果父类没有无参构造函数
          则编译会报错.
     5,还有一种比较复杂的情况是在子类的构造方法中用this调用了本类的其他构造方法,但其他构造方法必须调用父类的构造方法。

作者: 小马初长成    时间: 2014-4-27 22:19
在javascript中一共有四种调用模式:方法调用模式,函数调用模式,构造器调用模式,apply调用模式

这些模式在如何初始化关键参数this上存在差异。

1 方法调用模式(也就是用"."的方式来调用的)

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果一个调用表达式包含一个属性存取表达式(即一个.点表达式或者[subscript]下标表达式),那么它被当做一个方法来调用
  1. var myObject = {

  2.   value :0;

  3.   increment:fucntion (inc){

  4.     this.value += typeof inc ==='number' ? inc:1;

  5.   }

  6. };

  7. myObject.increment();

  8. document.writeln(myObject.value);  //1

  9. myObject.increment(2);

  10. document.writeln(myObject.value);  //3
复制代码

方法可以使用this去访问对象,所以它能从对象中取得或修改该对象。this到对象的绑定发生在调用的时候。这个“超级”迟绑定( very late binding)使得函数可以对this高度复用。通过this可取得它们所属对象的上下文的方法称为公共方法。
当一个函数并非一个对象的属性是,那么它被当做一个函数来调用:
var sum = add(3,4); //sum的值为7
当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误,倘若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误错误的后果是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:如果该方法定义一个变量并给他赋值为this,那么内部函数就可以通过那个变量访问到this。
  1. //给myObject增加一个double方法
  2. myObject.double = function(){
  3.     var that = this; //解决方案
  4.     var helper = function(){
  5.         that.value = add(that.value,that.value);
  6.     };
  7.     helper();//以函数的形式调用helper
  8. };
  9. //以方法的形式调用double
  10. myObject.double();
  11. document.writeln(myObject.getValue()); //6
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2