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