有关JavaScript的面向对象的function x(){
    x.a = 1;
    x.b = 2;
}
var y = new x();
x.a = 3;
y.b = 4;请问此时,y.a和y.b分别等于多少?
答案是y.a是undefined,很不解啊,求各位帮忙解答,多谢了

解决方案 »

  1.   

    y.a=undefind
    y.b=4
    很显然的,
    因为x.a是静态变量,属于类x,不属于x的对象y,所以x.a=3对y这个对象没有丝毫影响,而构造函数中也并没有定义a属性(需用this.a=..定义)
    记得结贴给分
      

  2.   

    因为js的弱类型,应该这样理解才确切:
    把构造函数x也同样看做对象,但是这个构造函数只是给x对象添加了a,b属性,没有做其他事.
    所以当用x函数实例化对象y时,并没有给y添加任何属性,至于后面的x.a=3不过是给x.a重新赋值而已,仍然没有给y添加属性,再后面y.b=4给y对象添加了属性b,故y对象只有一个b属性,所以y.a=undefind
    我想楼主能想明白,记得给分
      

  3.   

    y=x才等值 y是x new出来的 根本就没有a属性。
      

  4.   

    js 是弱类型。支持动态添加属性并赋值。
    var   y   =   new   x();
    x.a   =   3;
    y.b   =   4;  // 动态添加属性b并赋值4y 没有a 属性结果就是  undefined 和 4
      

  5.   

    很简单啊,function x()和new x()根本就不是同一个方法new x()就相当于是一个新的方法
    而且,你又没有定义y.a,你只定义了y.b对于一个根本不存在的变量,y.a当然是undefindd
      

  6.   

    无语 怎么加一个new 就成了新方法了,这明明是用函数x构造对象好不,这儿x被当做类的构造函数使用的,怎么就成另外的方法了... 
      

  7.   

    x()没有定义a这个属性,当然是undefine啊
      

  8.   

    注意
    function x(){ 
            x.a = 1; 
            x.b = 2; 
    }

    function x(){ 
            this.a   =   1; 
            this.b   =   2; 

    的区别。前一函数中,函数内的 x 是函数内的局部变量,和函数名 x 无关。
      

  9.   

    继上
    function x(){  
      x.a = 1;  
      x.b = 2;  
    }
    完整的写法应该是:
    function x(){  x.a = 1;  
      x.b = 2;  
    }
      

  10.   

    继#11楼(12楼发错了)
    function x(){   
      x.a = 1;   
      x.b = 2;   
    }
    完整的写法应该是:
    function x(){
      var x = {};//或 var x = new Object();
      x.a = 1;   
      x.b = 2;   
    }
      

  11.   


    你自己测试一下,看看两个东西是不是相等
    下面的new x()和上面的没有任何关系