我使用的是JavaScript代理,并且在设置陷阱中希望将数据发送到服务器,但是我不想发送不需要的额外数据,因此我尝试删除我要发送的对象,如下所示。
let handler = function(data){
const SAVE_DELAY = 850;
return {
set:function(target, key, value){
let sendData = Object.assign({},data);
sendData[key] = Object.assign({}, value);
function updateTarget() {
if(!target.__isupdating){
if(target.__updateTimeout){
clearTimeout((target.__updateTimeout));
}
target.__updateTimeout = setTimeout(() => {
target.__isupdating = true;
delete target.__updateTimeout;
for (var i in sendData.field) {
if (sendData.field[i].field_to_delete) {
delete sendData.field[i].field_to_delete;
}
}
ajaxCall("/api_endpoint",
sendData,
function (response) {
target.__isupdating = false;
if(response.data){
// Update was success
}
},
function(error){
console.log("Error updating! ",error);
})
},SAVE_DELAY);
}
}
updateTarget();
return true;
}
};
}
执行此删除操作后,我丢失了从(value)复制对象的字段,此后我仍然需要该字段。我没有看到可能以意想不到的方式影响原始对象的东西吗?
答案 0 :(得分:1)
好的,感谢艾萨克,我查找了深层复制与浅层复制,并能够找到要使用的正确代码
sendData[key] = JSON.parse(JSON.stringify(value));
相对于:
sendData[key] = Object.assign({}, value);