(1)浅拷贝

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

 const obj1 = {a: {b: 1}};const obj2 = Object.assign({}, obj1);obj1.a.b = 2;obj2.a.b // 2

(2)同名属性的替换

对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加。

 const target = { a: { b: 'c', d: 'e' } }const source = { a: { b: 'hello' } }Object.assign(target, source)// { a: { b: 'hello' } }

常见用途

(1)为对象添加属性

 class Point {constructor(x, y) {Object.assign(this, {x, y});}}

上面方法通过Object.assign方法,将x属性和y属性添加到Point类的对象实例。


(2)为对象添加方法

 Object.assign(SomeClass.prototype, {someMethod(arg1, arg2) {···},anotherMethod() {···}});

// 等同于下面的写法

 SomeClass.prototype.someMethod = function (arg1, arg2) {···};SomeClass.prototype.anotherMethod = function () {···};

上面代码使用了对象属性的简洁表示法,直接将两个函数放在大括号中,再使用assign方法添加到SomeClass.prototype之中。


(3)克隆对象

 function clone(origin) {return Object.assign({}, origin);}

上面代码将原始对象拷贝到一个空对象,就得到了原始对象的克隆。

不过,采用这种方法克隆,只能克隆原始对象自身的值,不能克隆它继承的值。如果想要保持继承链,可以采用下面的代码。

 function clone(origin) {let originProto = Object.getPrototypeOf(origin);return Object.assign(Object.create(originProto), origin);}

(4)合并多个对象

将多个对象合并到某个对象。

 const merge =(target, ...sources) => Object.assign(target, ...sources);

如果希望合并后返回一个新对象,可以改写上面函数,对一个空对象合并。

 const merge =(...sources) => Object.assign({}, ...sources);

(5)为属性指定默认值

 const DEFAULTS = {logLevel: 0,outputFormat: 'html'};function processContent(options) {options = Object.assign({}, DEFAULTS, options);console.log(options);// ...}

原文地址:http://es6.ruanyifeng.com/#docs/object 作者:阮一峰

object.assign相关推荐

  1. 【一语点醒梦中人】如何优雅地合并两个JSON对象 → Object.assign(a, b)和Object.assign({}, a, b)的区别

    var a = {a: 1}; var b = {b: 2}; var c = Object.assign(a, b);/* a对象也会改变,b不变,返回被被修改对象 */ var d = Objec ...

  2. JavaScript 复制对象与Object.assign方法无法实现深复制

    在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...

  3. Object​.assign()

    定义: 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它将返回目标对象. 语法: object.assign(target,. . .sources); target: 目标对象. sou ...

  4. assign深拷贝_经典前端面试题: Object.assign 是浅拷贝还是深拷贝?实现深拷贝的方法有哪些?...

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖.后面的源对象的属性将类 ...

  5. 原生js实现Object.assign和Object.create

    Object.assign(target,-sources) Object.assign(target,-source)方法用于将所有可枚举的属性的值从一个或多个源对象复制到目标对象.它将返回目标对象 ...

  6. ecma 2018, javascript spread syntax behaves like Object.assign

    as the subject. It is only supported in Chrome version 60+, so, first check the version, or just use ...

  7. 扩展运算符,Object.assign

    2019独角兽企业重金招聘Python工程师标准>>> assign或者...扩展符 都是浅拷贝 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 ...

  8. JavaScript深入理解对象方法——Object.assign()

    Object.assign() Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ... ...

  9. Object.create()和Object.assign()

    一.Object.create() 该方法用于创建一个新对象,并为其指定原型对象和属性. 语法:Object.create(prototype,description); proto:(必须),表示新 ...

  10. 瞎说系列之Object.assign入门

    瞎说系列之Object.assign入门 前言 过去的一个多月新接手了一个公司的老项目,在实现新需求的同时还需要对有些地方进行重构,故而导致了没时间更新文章.最近趁着周末更新一篇关于Object.as ...

最新文章

  1. oracle log block size,案例:Oracle无法启动报错ORA-00218: block size 0 重建控制文件
  2. CSS选择器笔记,element element和element element 的区别
  3. crackMe的逆向分析
  4. 试题 历届试题 幸运数(二分)
  5. Shell脚本函数(函数传参、递归、创建库)
  6. 记一则Hadoop DataNode OOM故障,以及解决方案
  7. 虚拟机(VMware Workstation)中,把连接网络的模式由“NAT模式”,改成“自动桥接模式”,网速大大的提升...
  8. 使用 Python 获取 Linux 系统信息的代码
  9. spark学习-29-源代码解析从start-all.sh脚本开始
  10. 机器学习与计算机视觉(第一个卷积神经网络)
  11. DwgLocker 图纸加密外发控制系统
  12. 手机app推广渠道的安装来源追踪与归因
  13. 宝石熔炼设备可以融化黄金吗?
  14. 【JC-2 DC220V冲击继电器】
  15. 教你用Python开发的一款迷你跑步游戏
  16. 郭天祥嵌入式开发教程
  17. [Python Tips] 从list中选择”除某个特定元素之外“的值
  18. python重要知识点_35个高级Python知识点总结
  19. 约瑟夫问题-N个人围成一圈循环杀掉第M个人
  20. Foxmail设置Gmail提示“用户名或密码不正确”解决办法

热门文章

  1. Spring注解中@Configuration和@Configurable的区别
  2. Hessian序列化复杂对象
  3. nginx和pcre错误问题
  4. 那些年,程序员用过的行酒令
  5. 解决英文或数字在HTMl网页中不自动换行。
  6. OpenCV训练分类器
  7. 敏捷游戏:从硬币游戏学习Scrum敏捷方法
  8. 转贴:Hyper-V的几款免费管理工具
  9. 依赖注入的几种形式及场景
  10. flex datagrid 导出csv