Javascript 添加到数组的对象最后添加的对象的所有更改
我只是简单地将对象添加到数组中,所有对象都会更改为最后一个附加值。这似乎非常奇怪Javascript 添加到数组的对象最后添加的对象的所有更改,javascript,jquery,html,arrays,Javascript,Jquery,Html,Arrays,我只是简单地将对象添加到数组中,所有对象都会更改为最后一个附加值。这似乎非常奇怪 var _object = {x:0,y:0,z:0}; var _objects = []; $("div").on("mousedown", function(e) { var offset = $(this).offset(); _object.x = e.pageX-offset.left; _object.y = e.pageY
var _object = {x:0,y:0,z:0};
var _objects = [];
$("div").on("mousedown", function(e) {
var offset = $(this).offset();
_object.x = e.pageX-offset.left;
_object.y = e.pageY-offset.top;
}).on("mouseup", function(e) {
var offset = $(this).offset();
_object.z = 25;
_objects.push(_object);
});
发生这种情况是因为它只添加了对象的链接吗
这是因为您每次都在修改同一对象并将同一对象添加到数组中。要解决此问题,可以在每次按下down键时创建新对象,如下所示
var offset = $(this).offset();
_object = {x:0,y:0,z:0}; // We create a new object every time.
_object.x = e.pageX-offset.left;
_object.y = e.pageY-offset.top;
选中此项是因为每次需要创建新对象时,都要更改
\u对象的同一实例
,并将其推送到数组中
var _object, _objects = [];
$("div").on("mousedown", function (e) {
var offset = $(this).offset();
_object.x = e.pageX - offset.left;
_object.y = e.pageY - offset.top;
_objects.push(_object);
}).on("mouseup", function (e) {
var offset = $(this).offset();
_object.z = 25;
_objects.push(_object);
}).mouseenter(function () {
_object = {
x: 0,
y: 0,
z: 0
};
});
$("button").on("click", function () {
console.log(_objects);
});
演示:请使用克隆:
更改:
_objects.push(_object);
到
您需要实例化一个新对象以推入数组。有很多方法可以做到这一点,这里有一个:
function coorObj(obj) {
return {
x: obj.x,
y: obj.y,
z: obj.z
}
}
只需在\u objects.push(coorbj(\u object))中调用它代码>
这是您最新的谢谢您的帮助这是一个完美的解决方案
var _object = {x:0,y:0};
var _objects = [];
$("div").on("mousedown", function(e) {
var offset = $(this).offset();
_object.x = e.pageX-offset.left;
_object.y = e.pageY-offset.top;
}).on("mouseup", function(e) {
var offset = $(this).offset();
_object.z = 25;
_objects.push({
x:_object.x,
y:_object.y,
y:25
});
});
对象在JS中通过引用传递,您正在更新和推送同一个对象。这只是添加了z,而不是x,y,z。
var _object = {x:0,y:0};
var _objects = [];
$("div").on("mousedown", function(e) {
var offset = $(this).offset();
_object.x = e.pageX-offset.left;
_object.y = e.pageY-offset.top;
}).on("mouseup", function(e) {
var offset = $(this).offset();
_object.z = 25;
_objects.push({
x:_object.x,
y:_object.y,
y:25
});
});