本帖最后由 wzd_spp 于 2012-10-30 19:46:12 编辑

解决方案 »

  1.   

    {x:point.x,y:point.y+1,redius:point}
    x:point.x 是一个对象的赋值,传递地址。
    y:point.y+1 是一个表达式的赋值,最终是把计算得出的表达式结果作为即时值传递赋给Y
    这和
    VAR A=1;
    VAR B=A+1; 的结果是 B=2,而不是B=(A+1)这个新对象一样。
      

  2.   

    在定义circle的时候你把point.y看成3就对了
      

  3.   

    <script>
    var point = {x:3,y:1}
    var circle = {x:point.x,y:point.y+1,redius:point}
    point.x = 5;
    alert(point.x);
    alert(circle.x);
    alert(circle.redius.x);
    </script>把y 变为x后 第二个alert的值仍没有受到point.x = 5 的影响
      

  4.   

    var point = {x:3,y:1}
    point.y = 5;
    var circle = {x:point.x,y:point.y+1,redius:point}
    alert(point.y);
    alert(circle.y);
    alert(circle.redius.y);
    执行顺序问题 定义circle时circle.y获取point.y成功就直接赋值,而redius是一个指针,每次调用时都会去读取当前point
      

  5.   

    上面已经说过了。
    表达式的结果是要看进行的何种运算,象point.y+1 这种表达式,是种数学运算,则返回的结果就是一个数字结果,不是跟point.y有关的对象。
    其它类型的表达式,结果可能返回对象,但这个很明显不是。
      

  6.   

    这问题就等价于 
    var a=1;
    b=a;
    a=2;
    alert(b);
    纯粹的值传递而已