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    
    });

});