有关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,很不解啊,求各位帮忙解答,多谢了
x.a = 1;
x.b = 2;
}
var y = new x();
x.a = 3;
y.b = 4;请问此时,y.a和y.b分别等于多少?
答案是y.a是undefined,很不解啊,求各位帮忙解答,多谢了
y.b=4
很显然的,
因为x.a是静态变量,属于类x,不属于x的对象y,所以x.a=3对y这个对象没有丝毫影响,而构造函数中也并没有定义a属性(需用this.a=..定义)
记得结贴给分
把构造函数x也同样看做对象,但是这个构造函数只是给x对象添加了a,b属性,没有做其他事.
所以当用x函数实例化对象y时,并没有给y添加任何属性,至于后面的x.a=3不过是给x.a重新赋值而已,仍然没有给y添加属性,再后面y.b=4给y对象添加了属性b,故y对象只有一个b属性,所以y.a=undefind
我想楼主能想明白,记得给分
var y = new x();
x.a = 3;
y.b = 4; // 动态添加属性b并赋值4y 没有a 属性结果就是 undefined 和 4
而且,你又没有定义y.a,你只定义了y.b对于一个根本不存在的变量,y.a当然是undefindd
function x(){
x.a = 1;
x.b = 2;
}
和
function x(){
this.a = 1;
this.b = 2;
}
的区别。前一函数中,函数内的 x 是函数内的局部变量,和函数名 x 无关。
function x(){
x.a = 1;
x.b = 2;
}
完整的写法应该是:
function x(){ x.a = 1;
x.b = 2;
}
function x(){
x.a = 1;
x.b = 2;
}
完整的写法应该是:
function x(){
var x = {};//或 var x = new Object();
x.a = 1;
x.b = 2;
}
你自己测试一下,看看两个东西是不是相等
下面的new x()和上面的没有任何关系