rihoonet 2008-06-15 22:10
浏览 280
已采纳

javascript对象中创建新对象问题

var TestObject = Class.create();

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

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

为什么多次执行(总是创建新对象后,向对象data数组里,加入一条数据)
var ss = new TestObject();
ss.data.push("AAA");
alert(ss.data.length);
ss.data.length会增加,按理说应该都是1才对吧?
[b]问题补充:[/b]
那怎么样才能不对象共享呢?

  • 写回答

2条回答 默认 最新

  • iteye_17163 2008-06-16 14:10
    关注

    如果使用
    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中的属性指向一个"对象"类型的数据.因为这样的话,会造成这个属性变为全局共享.任何地方的修改都会影响到另一个地方的值.

    如果一定要用的话.
    可以在声明类的时候用:
    [code="js"]
    function TestObject={
    this.dataa=new Array()
    }[/code]

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元