var p = new Point(1,2);//p(1,2)
刚测试了,这句话不能这样理解。那我改怎么理解呢? 

解决方案 »

  1.   

    楼主在写继承么
    call方法与apply方法都是javascript对象冒充继承的方法
    apply方法有两个参数
    用作this的对象和要传递给函数的参数数组
    如你的add.apply(p2,[5,6]);
    作用的动作应该是p2的3与数组的5相加,p2的4与数组的6相加
    你可以试试
    如果不对我们再研究
      

  2.   

    不对 不是3和5,4和6相加
    没有看到你的point方法
    应该是p2初始化后的x,y分别和5,6相加
      

  3.   

    var p3 =add.apply(p2,[5,6])
    此时p2的x和y分别为5和8,因为var p2= new Point(3,4); 把它初始化了 
    [5,6]数组作为参数传送给add方法,分别等于add方法的x和y
    new this.constructor(this.x+x,this.y+y);时this.x和this.y就是p2的x和y,分别等于5和8,x和y分别为5和6
    this.x+x = 5 + 5  = 10;
    this.y+y = 8 + 6  = 14;
    alert(p3)时进行p3的this.toString方法{
    x+= 8; //10+=8;
    y+= 6; //14+=6;
    return '['+[x,y]+']'; //在alert(p3)时结果为[18,20]
    }
    需要注意的是add.apply方法的第一个参数是你要继承的对象,第2个参数是你要传送给add方法的数组, 数组中的元素就是add方法的两个参数,在这里分别为x,y
    对象冒充继承
      

  4.   

    alert(p2);//11,10不是你说的5,8啊
      

  5.   

    var p2= new Point(3,4); 得到了p2
    p2的x和y就已经是5和8了
    因为在point(x,y)里的
    this.x=x+2; //在这里已经被改变了 new Point(3,4); 3 + 2 = 5 this.x已经等于5了
    this.y=y+4; //在这里已经被改变了 new Point(3,4); 4 + 4 = 8 this.y已经等于8了
    而你说的alert(p2);是调用了p2的tostring方法
    x+=8; //这里的x是参数3
    y+=6; //这里的y是参数4
    所以结果是[11,10]
    不要把x和this.x,y和this.y混淆
      

  6.   

    谢谢gahaya 我已经弄清楚了,一直不知道alert(p)会调用toString方法