javascript - 解构对象在修改后丢失引用
问题描述
赋值后对象引用丢失。任何以前的参考都不再相关。
我有以下内容:
// lib.js
const obj = { prop: { data: { some: 'empty' } } };
function loadObject() {
obj.prop.data = { some: 'load' };
}
modules.exports = { prop: obj.prop, data: obj.prop.data, loadObject() };
和
// main.js
const { prop, data, loadObject } = require('./lib');
loadObject();
console.log(prop.data); // data changed (new reference)
console.log(data); // data not changed (old reference)
如何在data
不丢失其初始参考的情况下进行修改?
PS:
我有一堆文件导入这个库,它依赖于data
. 我宁愿不在prop.data
每个使用它的文件中替换它或重新读取它。
解决方案
您替换data
为一个新对象。没有办法将引用旧对象的所有内容更改为指向新对象,因此,如果您想保持完全相同的 API,则必须更改对象而不是替换它 - 可能就像您之前所做的那样:
// if it’s a single property that’s the same before and after
function loadObject() {
obj.prop.data.some = 'load';
}
// if the properties before are a subset of the properties after
function loadObject() {
Object.assign(obj.prop.data, { some: 'load' });
}
// if you need to change the set of properties entirely
function loadObject() {
for (const key of Object.keys(obj.prop.data)) {
delete obj.prop.data[key];
}
Object.assign(obj.prop.data, { some: 'load' });
}
推荐阅读
- multithreading - 在线程之间共享相机帧
- vue.js - 在 Vue.js 中使用路由器渲染组件
- python - 解释缩放特征的逻辑回归系数
- node.js - 如何在不定义 Sequelize 模型的情况下使用 postgres 操作表
- git - 如何将 .env 文件存储在 github 中?
- reactjs - 如何通过 react-yandex-maps 在 yandex 地图上构建路线
- javascript - JS / GraphQL 视图 - BigCommerce 主 SKU
- tomcat - tomcat 9.0.38 构建问题
- data-visualization - Vega-Lite:从星期一开始的一周和一般错误的周数
- docker - 在 Bash 中检查 docker 实例