文件名称:新的_Object_方法-企业架构框架 togaf
文件大小:1.98MB
文件格式:PDF
更新时间:2024-07-07 23:14:09
Javascript ES6
14.3 新的 Object 方法 14.3.1 Object.assign(target, source_1, source_2, ···) 该方法将源数据( source )合并到目标数据( target )中去:会修改 target ,第一步拷贝 source_1 上所有的可枚举自有属性到 target ,然后是 source_2 ,以此类推。最后,返回目标数据。 let obj = { foo: 123 }; Object.assign(obj, { bar: true }); console.log(JSON.stringify(obj)); // {"foo":123,"bar":true} 让我们更近距离地看下 Object.assign() 是如何运作的: 两种属性键: Object.assign() 支持字符串和 Symbol 作为属性键。 仅操作可枚举的自有属性: Object.assign() 忽略继承的属性和不可枚举 的属性。 通过赋值来拷贝:在目标对象中的属性通过赋值(内部操作 [[Put]] )来创建。 这意味着如果 target 上有(自有的或继承的) setters ,在拷贝的时候会被 调用。另一种可选的定义新属性的方式就是始终创建新的属性,而不调用 setters 。本来有人提议让 Object.assign() 也支持使用定义而不是赋值的 方式,这个建议最终在 ECMAScript 6 中被拒绝了,但是可能在后面的版本中 会重新考虑。 不能移动使用 super 的方法:这样的方法有一个内部属性 [[HomeObject]] ,该属性将该方法与创建该方法的时候所在的对象绑定起 来。如果通过 Object.assign() 移动这个方法,该方法将会保持和原对象 的这种绑定。详细内容在本章关于类的那一节讲解。 14.3.1.1 Object.assign() 的使用场景 让我们看几个使用场景。 14.3.1.1.1 给 this 添加属性 在构造器中可以使用 Object.assign() 给 this 添加属性: class Point { constructor(x, y) { Object.assign(this, {x, y}); } } 14.3 新的 Object 方法 182