问题描述
我正在尝试编写一个函数,让用户上传他们的本地 JSON 文件作为一个 save
对象来替换它:
function uploadJSON(importObject,importID) {
//{...}
reader.onload = function () {
importObject = JSON.parse(reader.result);
uploadAnchorNode.remove();
}
//{...}
}
当我调用 uploadJSON(save,"someid")
和 console.log(save)
时,它会显示旧的保存。
如果我将第 4 行设置为:
save = JSON.parse(reader.result);
//or:
importObject.settings = JSON.parse(reader.result).settings;
importObject.game = JSON.parse(reader.result).game;
importObject.errors = JSON.parse(reader.result).errors;
效果很好。
为什么我不能像这样设置整个对象:importObject = JSON.parse(reader.result);
?
解决方法
因为您收到了对对象的引用。
想象一下这种情况:
{% for mapping_operation in mapping_operation_list.all %}
如果您没有觉得这令人惊讶(并且没有理由让您感到惊讶),那么以下内容也不会让您感到惊讶,因为它们完全相同。
var foo = { // now "foo" contains a reference to an object
data: "something"
};
var bar = foo; // now "bar" contains a new reference to the same object
bar = {}; // overwriting "bar" will not change "foo"
您可以更改对象的属性,然后对该对象的所有引用都将显示相同的状态也不足为奇,因为该对象只存在一次。