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

原型继承的问题
如下代码:
-------------------
function A(){
}

A.prototype = {
s: [],
m: function(){
this.s.push(1);
}
};

var x = new A;
x.m();
x.m();

var y = new A;
y.m();
y.m();
y.m();

----------------------------
为什么y.s.length的结果是5?(可直接在浏览器调试器中运行)


---------------------------

function A(){
}

A.prototype = {
s: 0,
m: function(){
this.s++;
}
};

var x = new A;
x.m();
x.m();

var y = new A;
y.m();
y.m();
y.m();

--------------

为什么y.s为3?


也就是说,为什么是数字的时候,不管以前如何new的时候都是初始化,而是数组的时候,每次new的时候都会受到别的对象的影响?

------解决方案--------------------
原型上的成员是共享的,
第一个是5的原因就很明显了,总共执行了5次push,该数组长度为5

第二个搞清出++运算符的意义
this.s++ 等价于 this.s = this.s+1;
对象上添加了该成员,不再访问原型上的成员,该成员属于对象自身,不再被共享,可能你不好理解,你可以做个测试
就以你上面一个例子
var x = new A;
x.m();
x.m();

var y = new A;
y.m = [];
y.m();
y.m();
y.m();
alert(y.s.length);