日期:2014-05-16  浏览次数:20334 次

据说是网易的一道面试题,各位帮忙看看怎么做
有关JavaScript的面向对象的
[code=JScript]
function   x(){
        x.a   =   1;
        x.b   =   2;
}
var   y   =   new   x();
x.a   =   3;
y.b   =   4;
[/code]
请问此时,y.a和y.b分别等于多少?
答案是y.a是undefined,很不解啊,求各位帮忙解答,多谢了


------解决方案--------------------
y.a=undefind
y.b=4
很显然的,
因为x.a是静态变量,属于类x,不属于x的对象y,所以x.a=3对y这个对象没有丝毫影响,而构造函数中也并没有定义a属性(需用this.a=..定义)
记得结贴给分
------解决方案--------------------
y=x才等值 y是x new出来的 根本就没有a属性。
------解决方案--------------------
js 是弱类型。支持动态添加属性并赋值。
var y = new x();
x.a = 3;
y.b = 4; // 动态添加属性b并赋值4

y 没有a 属性

结果就是 undefined 和 4
------解决方案--------------------
这道题 ‘坑’

------解决方案--------------------
很简单啊,function x()和new x()根本就不是同一个方法

new x()就相当于是一个新的方法
而且,你又没有定义y.a,你只定义了y.b

对于一个根本不存在的变量,y.a当然是undefindd
------解决方案--------------------
x()没有定义a这个属性,当然是undefine啊