# 对象继承赋值

使用 lodash _.assignIn 分配自有和继承属性

> 标准页面: https://elysiatools.com/zh/tools/assign-in-object

- **分类:** Data Processing

- **关键词:** assignIn, 对象, lodash, 合并, 属性

## 概述

将来源对象的自有和继承可枚举属性分配到目标对象。

**亮点：**
- 使用 lodash `_.assignIn`
- 包含继承的可枚举属性
- 后面的来源会覆盖前面的值

**示例：**
- 目标：`{"a":1}`
- 来源 1：`{"b":2}`
- 来源 2：`{"a":3}`
- 结果：`{"a":3,"b":2}`

## 输入项

- **目标对象** (textarea): 输入目标 JSON 对象
- **来源 1** (textarea): 第一个来源对象
- **来源 2** (textarea): 可选的来源对象
- **来源 3** (textarea): 可选的来源对象

## 适用场景

- 需要将多个配置对象或数据对象合并为一个统一对象时。
- 处理 JavaScript 对象时，需要确保原型链上的可枚举属性也被合并。
- 希望用一个或多个源对象来更新或扩展一个目标对象的属性。

## 工作原理

- 在“目标对象”输入框中，输入作为合并基础的 JSON 对象。
- 在“来源”输入框中，依次输入一个或多个要合并的源 JSON 对象。
- 工具调用 lodash 的 `_.assignIn` 方法执行合并操作。
- 输出一个合并了所有源对象（包括继承属性）的新对象。

## 使用案例

- 合并来自不同模块或文件的默认配置与用户自定义配置。
- 在数据处理中，将多个来源的数据记录聚合成一个完整的数据对象。
- 为对象设置一套默认属性值，然后用特定值覆盖其中的一部分。

## 常见问题

### 这个工具和普通的对象合并（assign）有什么区别？

主要区别在于 `assignIn` 会合并源对象原型链上可枚举的属性，而普通的 `assign` 或扩展运算符 `...` 通常只合并对象自身的可枚举属性。

### 最多可以合并几个源对象？

工具提供了三个源对象输入框（来源1、来源2、来源3），其中“来源1”是必填的，“来源2”和“来源3”是可选的。

### 如果多个源对象有相同的属性名，会怎么处理？

按照输入顺序，后面源对象的属性值会覆盖前面源对象以及目标对象中的同名属性值。

### 这个操作会修改我输入的原始目标对象吗？

不会。工具返回的是一个合并后的新对象，您输入的目标对象和源对象在过程中不会被修改。

### 输入必须是严格的 JSON 格式吗？

是的，所有输入框的内容都必须是有效的 JSON 对象格式，例如 `{"key": "value"}`。

## 相关工具

- [深度默认值](https://elysiatools.com/zh/tools/defaults-deep): 使用 lodash _.defaultsDeep 应用深度默认值
- [遍历对象](https://elysiatools.com/zh/tools/for-in-object): 使用 lodash _.forIn 遍历对象属性
- [遍历自有属性](https://elysiatools.com/zh/tools/for-own): 使用 lodash _.forOwn 遍历对象自有属性
- [对象反转](https://elysiatools.com/zh/tools/invert-object): 使用 lodash _.invert 反转键和值
- [继承键列表](https://elysiatools.com/zh/tools/keys-in-list): 使用 lodash _.keysIn 获取键列表
- [键列表](https://elysiatools.com/zh/tools/keys-list): 使用 lodash _.keys 获取键列表
- [按键计数](https://elysiatools.com/zh/tools/count-by): 使用 lodash _.countBy 按派生键计数
- [查找键](https://elysiatools.com/zh/tools/find-key): 使用 lodash _.findKey 查找第一个匹配的键

## 示例

- [Grafana 高级应用示例](https://elysiatools.com/zh/samples/grafana-samples): 全面的 Grafana 示例，涵盖高级仪表板设计、告警配置、数据源集成和插件开发
- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [D3.js 数据可视化示例](https://elysiatools.com/zh/samples/d3js-data-visualization): 全面的D3.js数据可视化示例，包括图表、地图、动画和交互式可视化
- [Rome JavaScript 工具链示例](https://elysiatools.com/zh/samples/rome): Rome JavaScript 工具链示例，包括配置、代码检查、格式化、打包和项目管理
