当前位置: 首页 > news >正文

Object.assign()方法合并两个js对象

MDN文档对该方法的描述如下

在这里插入图片描述
即形如Object.assign(obj1, obj2)的语法中,会将obj1obj2的所有属性合并,并返回新的对象。

手写测试

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  },
  data() {
    return {
      obj1: {
        key1: 1,
        key2: 2,
        methods: {
          test() {
            console.log('test');
          }
        }
      }
    }
  },
  created() {
    const obj2 = {
      key2: '4',
      key3: 3,
      methods: {
        test2() {
          console.log('test2');
        },
        test3() {
          console.log('test3');
        }
      }
    };
    const newObj = Object.assign(this.obj1, obj2);
    console.log(newObj);
    newObj.methods.test2();
    newObj.methods.test();
  },
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

运行效果

在这里插入图片描述

注意

在这里插入图片描述
obj2.key2会覆盖掉obj1.key2的值,并且obj2.methods也会覆盖obj1.methods

思考

多个obj合并会如何?

const obj2 = {
      key2: '4',
      key3: 3,
      methods: {
        test2() {
          console.log('test2');
        },
        test3() {
          console.log('test3');
        }
      }
    };
    const obj3 = {
      key3: 99
    };
    const newObj = Object.assign(this.obj1, obj2, obj3);
    console.log(newObj);
    newObj.methods.test2();
    newObj.methods.test();

在这里插入图片描述
方法传入多个对象参数时,始终以最后的key3为最终有效值

使用Object.assign方法动态合并的对象与vue实例的响应式关系

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <span>{{ newObj.key3 }}</span>
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  },
  data() {
    return {
      obj1: {
        key1: 1,
        key2: 2,
        methods: {
          test() {
            console.log('test');
          }
        }
      },
      newObj: null
    }
  },
  created() {
    const obj2 = {
      key2: '4',
      key3: 3,
      methods: {
        test2() {
          console.log('test2');
        },
        test3() {
          console.log('test3');
        }
      }
    };
    const obj3 = {
      key3: 99
    };
    this.newObj = Object.assign(this.obj1, obj2, obj3);
  },
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

可以看到,初始化时data中的响应式数据里并没有key3键,但是使用assign方法后续加上的key3属性仍然正常显示在页面,所以该属性动态添加后是响应式的,并没有深度响应的问题。

相关文章:

  • git----暂存变更和恢复暂存的变更
  • pull/push时提示The requested URL returned error: 403
  • RESTFUL接口文档设计指南
  • JS用forEach遍历数组时无法用return退出
  • Element——el-table给所有的row和column数据加上索引
  • 使用ElementUI开发的情况下,多使用Layout布局
  • Element——el-table单元格无法设置外边距,只能通过border-width实现间隔效果
  • 分支开发模式Git常用操作
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • Vue——子组件中引入父组件
  • Vue——$attrs和$listeners
  • JS代码优化技巧——持续更新
  • 文字居于div底部的方式
  • Element——el-table设置单元格间距
  • Vue——插槽语法
  • 收藏网友的 源程序下载网
  • HTML5新特性总结
  • Java教程_软件开发基础
  • MaxCompute访问TableStore(OTS) 数据
  • php面试题 汇集2
  • 订阅Forge Viewer所有的事件
  • - 概述 - 《设计模式(极简c++版)》
  • 简析gRPC client 连接管理
  • 算法---两个栈实现一个队列
  • 用 Swift 编写面向协议的视图
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #QT(串口助手-界面)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (6)STL算法之转换
  • (bean配置类的注解开发)学习Spring的第十三天
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十五)使用Nexus创建Maven私服
  • (转) 深度模型优化性能 调参
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .gitignore文件设置了忽略但不生效
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET连接MongoDB数据库实例教程
  • .Net中wcf服务生成及调用
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • :O)修改linux硬件时间
  • [ 数据结构 - C++] AVL树原理及实现
  • [20170713] 无法访问SQL Server
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [CSS3备忘] transform animation 等
  • [dts]Device Tree机制
  • [EWS]查找 文件夹
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [JavaScript]_[初级]_[关于forin或for...in循环语句的用法]