Object.assign的一些用法

Posted on   猫头唔食鱼  阅读(383)  评论(0编辑  收藏  举报

用法1:替换数组的值

      // 用法1:替换数组的值
        let a = [1,2,3],b = [4,5]
       console.log( Object.assign(a,b)); // 后面的值覆盖前面的值,[4,5,3]
用法2:为对象添加属性
下面是es5的写法:this.xxx =xxx
复制代码
  //    es5的写法
       class Test{
            constructor(x,y){
                this.x =x
                this.y = y
            }

            sum(){
                return this.x + this.y
            }
       }
       let t = new Test(1,2)
       console.log(t.sum());
复制代码

用Object.assign的写法

复制代码
       // Object.assign的写法
       class Test2{
           constructor(x,y){
             Object.assign(this,{x,y})
           }
           sum2(){
                
               return this.x + this.y
           }
       }

       let t2 = new Test2(1,2)
       console.log(t2.sum2());
复制代码
用法3 深度克隆对象
//    用法3 深度克隆对象
     let clone = (orignObj) => {
            let originProto = Object.getPrototypeOf(orignObj)
            return Object.assign(Object.create(originProto), orignObj)
        }
        let obj3 = { name: 'zs', age: 12 }
        console.log(clone(obj3));
用法4:合并对象属性
下面这种写法,合并后,原来的两个对象都已经改变
 // example1
        let obj = {name:'zs'} ,obj2 = {name:'zs',age:12}
        let merge = (target, ...v) => Object.assign(target, ...v)
        console.log(merge(obj,obj2));// {name:'zs',age:12}
        console.log(obj,obj2); // 合并后,两个对象都已经改变,值都是 {name:'zs',age:12}

如果不想改变原来的对象,可以用下面这个写法

  // example2 合并后,返回一个新对象,不更改原有对象的属性
        let merge2 = (...v) => Object.assign({}, ...v)
        console.log(merge2(obj, obj2));// {name:'zs',age:12}
        console.log(obj); //  原来的对象保持原样  {name:'zs'} 
        console.log(obj2); //  原来的对象保持原样  {name:'zs',age:12}

合并对象,还可以用展开操作符,简单快捷

 // 合并对象,还可以用展开操作符
        let obj5 = {name:'zs'},obj6 = {age:12}
        let newOjb = {...obj5,...obj6}
        console.log(newOjb);
用法5.为默认对象新增属性
         // 用法5.为默认对象新增属性
         const DEFAULTS = { name: 'zs', age: 13 } // 默认对象
        let createObjWithDefault = (opt) => Object.assign({}, DEFAULTS, opt)
        console.log(createObjWithDefault({ 'addr': 'gz' }));

 

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2019-09-22 创建koa2项目
点击右上角即可分享
微信分享提示