Javascript 每次都插入相同的对象

Javascript 每次都插入相同的对象,javascript,jquery,object,Javascript,Jquery,Object,我不知道我做错了什么,但我不能将对象推到现有对象上。我有盒子和计算器。。。点击方框“.items”后 有人知道为什么.push()不在每次之后插入对象,为什么每次都在每个数组位置插入最后一个对象吗 更新: 我更新了@Pointy提到的函数,我应该创建一个object的副本 $(desk).on('click','#ok-order',function(){ var copiedObject = jQuery.extend({},activeItem); currentOrder.

我不知道我做错了什么,但我不能将对象推到现有对象上。我有盒子和计算器。。。点击方框“.items”后

有人知道为什么
.push()
不在每次之后插入对象,为什么每次都在每个数组位置插入最后一个对象吗

更新: 我更新了@Pointy提到的函数,我应该创建一个object的副本

$(desk).on('click','#ok-order',function(){
    var copiedObject = jQuery.extend({},activeItem);
    currentOrder.items.push(copiedObject);
    // currentOrder.items[currentOrder.items.length] = activeItem;
    addToOrderedItemsList();

});

因为只有一个物体。您从不更新“activeItem”以引用新对象。无论何时要开始新项目,都需要从新对象开始:

activeItem = {};

实际上,它不是插入最后一个,而是每次插入相同的项目。原因是该守则—

var activeItem = {
    itemId : 0,
    itemName: '',
    itemAmount : 0,
    itemPrice : 0
}
你看,这一行创建并初始化对象
activeItem
。在其他任何地方,您都没有实例化一个新的。因此,每次修改它时,它都在修改相同的项并插入相同的项。要修复,您应该在函数中实例化它。类似于-

<other codes>.....

var itemTemplate = function(){
    this.itemId = 0;
    this.itemName = '';
    this.itemAmount = 0;
    this.itemPrice = 0;
    return this;
};

activeItem = null;

$(desk).on('click', '.items', function(){

    activeItem = new itemTemplate();

    activeItem.itemId = 0;
    activeItem.itemAmount = 0;
    activeItem.itemPrice = 0;
    item.removeClass('selected-item');
    $(this).toggleClass('selected-item');

    activeItem.itemName = $(this).text();
    activeItem.itemId = $(this)[0].dataset.itemid;
    activeItem.itemPrice = $(this)[0].dataset.itemprice;

});

<other codes>....
。。。。。
var itemTemplate=函数(){
this.itemId=0;
this.itemName='';
此.itemAmount=0;
此.itemPrice=0;
归还这个;
};
activeItem=null;
$(桌面).on('单击','.items',函数(){
activeItem=新的itemTemplate();
activeItem.itemId=0;
activeItem.itemAmount=0;
activeItem.itemPrice=0;
item.removeClass(“选定项”);
$(this.toggleClass('selected-item');
activeItem.itemName=$(this.text();
activeItem.itemId=$(此)[0].dataset.itemId;
activeItem.itemPrice=$(此)[0].dataset.itemPrice;
});
....

看看克隆,它可能与Pointy所说的重复,或者简单地说,
activeItem={}也应该这样做,而不是
activeItem=newitemtemplate()谢谢@Mahmud,我用.extend()创建对象副本
activeItem = {};
var activeItem = {
    itemId : 0,
    itemName: '',
    itemAmount : 0,
    itemPrice : 0
}
<other codes>.....

var itemTemplate = function(){
    this.itemId = 0;
    this.itemName = '';
    this.itemAmount = 0;
    this.itemPrice = 0;
    return this;
};

activeItem = null;

$(desk).on('click', '.items', function(){

    activeItem = new itemTemplate();

    activeItem.itemId = 0;
    activeItem.itemAmount = 0;
    activeItem.itemPrice = 0;
    item.removeClass('selected-item');
    $(this).toggleClass('selected-item');

    activeItem.itemName = $(this).text();
    activeItem.itemId = $(this)[0].dataset.itemid;
    activeItem.itemPrice = $(this)[0].dataset.itemprice;

});

<other codes>....