• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
白道友
博客园    首页    新随笔    联系   管理    订阅  订阅

JavaScript Object中的函数assign

Object函数提供了一个叫做assign的函数,用来合并多个对象。

Object.assign(...);

你可以传递多个对象给该函数,这些对象中的自有且可枚举的属性,会被拷贝给第一个对象。

 

var a={name:'jack'};
var b={age:10};
Object.assign(a,b);
console.log(a) // 'Object {name: "jack", age: 10}'

 

 

 

该方法会修改传入的第一个对象,所以要小心这种改变,由于,函数会在最后return这第一个对象,

你可以传一个{},作为函数的第一个实参,这样剩下对象的自有且可枚举的属性,会被拷贝到这个空对象中并返回这个对象,这样可以避免不需要的修改。

var a={name:'jack'};
var b={age:10};
var c=Object.assign({},a,b);
console.log(c) // 'Object {name: "jack", age: 10}'

对于重复出现的属性,会被相对于右边的值覆盖,因为该函数是从左到右操作参数的。

所以,实参的顺序会影响到最终的结果。

var a={name:'jack'};
var b={name:10};
Object.assign(a,b);
console.log(a); // 'Object {name: 10}'

当第一个对象中,存在一个只读属性,而接下来的对象里,也存在一个同名的属性时,就会产生一个TypeError

Cannot assign to read only property '属性名' of object '#<Object>'

 

var a={name:'jack'};
Object.defineProperty(a,'name',{writable:false});//设置为只读
var b={name:10};
Object.assign(a,b);//报错

 

虽然产生了错误,但并不意味着所有的拷贝都失败,已经拷贝成功的属性不会受到影响,还未拷贝的属性不会再被拷贝。

    //解决方法
    Object.assign({},a,b);

 

posted @ 2019-02-28 19:56  白道友  阅读(1440)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3