ES6中Object.assign()方法

本文主要和大家分享,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()方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787635.html

(0)
上一篇 2025年3月8日 18:11:42
下一篇 2025年3月8日 18:11:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue-router实现权限控制方法

    本文主要和大家介绍vue-router 权限控制的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 最近搭建了公司的后台管理系统, 而且系统还比较庞大, 要实现以下几点: 菜单权限, …

    编程技术 2025年3月8日
    200
  • JavaScript求最大公共子串的方法详解

    本文主要和大家介绍javascript实现求最大公共子串的方法,涉及javascript针对字符串的遍历、匹配、运算等相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 求最大公共子串,常见的做法是使用矩阵。假设有字符串:abcdefg…

    编程技术 2025年3月8日
    200
  • 限时抢购倒计时功能实现方法

    本文主要为大家带来一篇限时抢购-倒计时的完整实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 如下所示: nbsp;HTML>  团购——限时抢 还剩  function …

    2025年3月8日
    200
  • JS路由跳转的简单方法

    js路由跳转功能有很多方法可以实现,本文主要和大家分享一个简单的js路由跳转功能,非常不错,需要的朋友参考下吧。希望能帮助到大家。 下面的连接中有复杂的路由跳转 Title CHINACHINA1CHINA2CHINA311111 var …

    编程技术 2025年3月8日
    200
  • JavaScript数组去重的几种方法分享

    数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素。一般来说,两个元素通过 === 比较返回 true 的视为相同元素,需要去重,所以,1 和 “1” 是不同的元素,1 和 new nu…

    编程技术 2025年3月8日
    200
  • 全面理解Object.assign

    object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它会返回目标对象。本文主要和大家分享object.assign的全面解析。 为了便于理解,此处贴出mdn的对Object.assign的polyfi…

    编程技术 2025年3月8日
    200
  • ajax前后台跨域请求处理方法

    最近一直在搞公众号前台开发,遇到了ajax跨域请求的问题,像地区的省-市-县三级联动、汽车品牌-车系-车款的三级联动查询等都需要调用外部接口(其他工程项目的接口)完成。本文主要介绍通过前台跨域请求处理以及后台跨域的数据处理方式,详细分析了a…

    编程技术 2025年3月8日
    200
  • vue 2.0和elementUI实现面包屑导航栏方法代码

    本文主要和大家分享vue 2.0和elementui实现面包屑导航栏方法代码,希望能帮助到大家。 Main.js var routeList = [];router.beforeEach((to, from, next) => { v…

    编程技术 2025年3月8日
    200
  • 子组件调用父组件的方法实例

    出于某些目的,最近又开始研究起了rn,看着教程一步步的学习,在最近却是碰到了一个问题,那就是父子组件的方法调用的问题。这个问题我百度了很久,js的es6语法下,用class创建组件,子组件调用父组件方法模拟器不断报错。本文主要为大家分享一篇…

    编程技术 2025年3月8日
    200
  • node.js中fs文件操作方法

    本文主要给大家详细分析了node.js中fs文件系统目录操作与文件信息操作的方法以及代码详解,需要的读者可以参考下。希望能帮助到大家。 目录操作 如果存在该目录,就创建失败 同步创建目录fs.mkdirSync(path, [mode]) …

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论