【文件属性】:
文件名称:新的_Object_方法-企业架构框架 togaf
文件大小:1.98MB
文件格式:PDF
更新时间:2021-06-18 05:27:29
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