对象创建的问题

var TestObject = Class.create();

TestObject.prototype = {
data: new Array(),
initialize: function(){
}
}

var ss = new TestObject();
ss.data.push("AAA");
alert(ss.data.length);

为什么我多次执行
var ss = new TestObject();
ss.data.push("AAA");
alert(ss.data.length);
ss.data.length为增加?也就是说创建的新对象好像重用了data...

这个问题我已经为你回答过了.再粘贴一遍吧:

如果使用
TestObject.prototype.data=new Array();
给它的data赋值的话.
相当于创建了一个全局变量(假设说它的名字为temp),temp=new Array();
然后TestObject,prototype.data=temp;

因为temp是一个"对象".所以TestObject,prototype.data的值实际上是类似于C语言中的指针,指向了new Array()的地址.
所以,当你使用ss.data.push("AAA");之后,实际上是push到了temp这个全局变量中.因为其它的TestObject对象中的data全都是共享了temp这个变量.所以只要修改其中一个,其它的都会受影响.但如果用一个普通的值类型变量,如一个数字123,或一个字符串"test",不管怎么修改都不会出错了.
建议楼主在不要随便让prototype中的属性指向一个"对象"类型的数据.因为这样的话,会造成这个属性变为全局共享.任何地方的修改都会影响到另一个地方的值.

如果一定要用的话.
可以在声明类的时候用:
Js代码
function TestObject={

this.dataa=new Array()

}

function TestObject={
this.dataa=new Array()
}

这样,由于作用域的关系,你每次创建TestObject这个类的实例时,都会新建一个Array对象,不会上上面一样,共享同一个Array的对象.

上面代码复制的时候出了点小问题...
楼主不要见怪,正确的代码在另外一个回答里. :arrow: