javascript - JS对类中数组属性提前插入了新对象,这是怎么回事?
ringa_lee
ringa_lee 2017-04-11 12:00:17
[JavaScript讨论组]

我想取出这个类中的数组tables里的最后一个对象,然后对它进行修改,比如 将最后一个对象中里面的timestamp属性修改为1,然后再作为一个新的对象通过 push 插入到原来数组的最后。(!不改变原来数组中的最后一个对象)

代码如下:

但是奇怪的是我在修改lastTable之前输出一下数组,缩略下显示数组有一个object展开后却变成了两个,而且此时我并没有将对象中的timestamp赋值为1,但展开后的数组里面的timestamp却都变成了1(理论上因该是"1470123842")

即便这只是显示错误,但是我在代码中明明只对其中一个对象的timestamp赋值了1 但是结果两个对象都都变了,这就更加奇怪了,数组的push操作被提前执行,属性的赋值被赋值到其它对象中,这该怎么解决?

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
PHPz

这种结果已经告诉你你尝试修改的你认为是两个对象其实是引用了同一个对象,从数组中取出来的对象,如果你要进行修改,应该先对该对象进行复制,这里借用一下jQuery的extend方法复制:

this.lastTable = $.extend(true,{},this.table[this.table.length - 1]);
高洛峰

如果将一个对象赋值给一个变量,其实是赋值给变量的是一个指向该对象的地址。你将这个变量的值赋值给另一个变量,只不过是增加了一个指向该对象的入口罢了。

所以你应该创建一个对象的副本,可以使用Object.create(参数为你要复制的对象),这样就会返回一个参数对象副本

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号