微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我不能设置传递给函数的对象,但可以设置它的子对象?

如何解决为什么我不能设置传递给函数的对象,但可以设置它的子对象?

我正在尝试编写一个函数,让用户上传他们的本地 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"

您可以更改对象的属性,然后对该对象的所有引用都将显示相同的状态也不足为奇,因为该对象只存在一次。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。