• 技术文章 >web前端 >js教程

    ES6中Object.assign()方法

    小云云小云云2018-02-03 13:32:57原创787
    本文主要和大家分享,Object.assign方法用于对象的合并,将源对象( source )的所有可枚举属性,复制到目标对象( target ),下面这篇文章主要给大家介绍了关于ES6中新增的Object.assign()方法的相关资料,需要的朋友可以参考下,希望能帮助到大家。

    前言

    将A对象的属性复制给B对象,这是JavaScript编程中很常见的操作。下面这篇文章将介绍ES6的Object.assign()属性,可以用于对象复制。

    在JavaScript生态系统中,对象复制有另外一个术语: extend。下面是两个JS库提供的extend接口:

    Prototype: Object.extend(destination, source)

    Underscore.js: _.extend(destination, *sources)

    Object.assign()介绍

    ES6提供了Object.assign() ,用于合并/复制对象的属性。

    Object.assign(target, source_1, ..., source_n)

    它会修改target对象,然后将它返回:先将source_1对象的所有可枚举属性复制给target,然后依次复制source_1等的属性。

    1. 属性名可以为字符串或者Symbol

    在ES6中,对象的属性名可以是字符串或者Symbol。因为Symbol值具有唯一性,这就意味着Symbol作为对象的属性名时,可以保证不会出现同名的属性。对象属性名为字符串或者Symbol时,Object.assign()都支持。

    2. 属性复制通过赋值实现

    target对象的属性是通过复制来创建的,这就意味着,如果target有setters方法时,它们将会被调用。

    另一种方案是通过定义来实现,这样将会创建新的自有属性,不会调用setters方法。其实,另一个版本的Object.assign()的提案正是采用这种方法。不过,这个提议在ES6中被拒绝了,也许之后的版本会再考虑。

    Object.assign()使用示例

    1. 初始化对象属性

    构造器正是为了初始化对象的属性,通常,我们不得不多次重复属性的名字。示例代码的constructor中,x与y均重复了两次:

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

    如果可以的话,个人偏爱将所有冗余都省去。(事实上,CoffeeScript与TypeScript都有语法解决构造器中属性名重复的问题。):

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

    至少,Object.assign()可以帮助我们减少一些重复:

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

    在ES6中, { x, y }为{ x: x, y: y }的缩写。

    2. 为对象添加方法

    ECMAScript 5, you use a function expression to add a method to an object:

    在ES5中,需要使用function关键字定义对象的新增方法:

    MyClass.prototype.foo = function(arg1, arg2)
    {
     //...
    };

    在ES6中,对象方法的定义更加简洁,不需要使用function关键字。这时,可以使用Object.assign()为对象新增方法:

    Object.assign(MyClass.prototype,
    {
     foo(arg1, arg2)
     {
      //...
     }
    });

    3. 复制对象

    使用Object.assign()深度复制对象,包括其prototype

    var Point = function(x)
    {
     this.x = x;
    }
    
    Point.prototype.y = 2;
    
    var obj = new Point(1);
    
    var copy = Object.assign({ __proto__: obj.__proto__ }, obj); // 输出{x:1,y:2}
    
    console.log(copy) // 输出{x:1,y:2}

    仅复制自身属性:

    var Point = function(x)
    {
     this.x = x;
    }
    
    Point.prototype.y = 2;
    
    var obj = new Point(1);
    
    var copy = Object.assign({}, obj);
    
    console.log(copy) // 输出{x:1}

    相关推荐:

    7个ES6的实用技巧分享

    ES6 javascript中class类的get与set用法实例

    ES6中类的静态方法有哪些作用

    以上就是ES6中Object.assign()方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Object.assign 方法
    上一篇:javascript随机生成一定位数的密码代码教程 下一篇:Vee-Validate如何使用
    大前端线上培训班

    相关文章推荐

    • 浅谈Nodejs中要怎么做定时任务• javascript怎么实现句子反转• 浅析Node.js+Winston库如何构建简单日志功能• 浅谈Angular父子组件间怎么进行通信• JavaScript怎么实现定时关闭div

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网