在现代的前端开发中,Object.assign() 方法是一个非常常用的工具。它可以将多个对象合并到一个对象中,甚至可以用来创建一个新的对象。在 ES7 中,Object.assign() 方法被标准化,同时引入了一些新的特性,如下:
- 支持将源对象拷贝到原型对象中
- 支持 Symbol 属性的复制
接下来,我们将详细解析 Object.assign() 方法的使用和特性。
Object.assign() 的基本使用
Object.assign() 方法用于将多个源对象的属性和方法合并到一个目标对象中。它有以下语法:
Object.assign(target, ...sources)
其中,target 是目标对象,sources 是一个或多个源对象。
示例代码:
const target = { a: 1, b: 2 }; const source = { b: 4, c: 5 }; const result = Object.assign(target, source); console.log(target); // { a: 1, b: 4, c: 5 } console.log(result); // { a: 1, b: 4, c: 5 }
在上面的示例中,我们创建了一个目标对象 target 和一个源对象 source。在运行 Object.assign() 方法后,目标对象 target 和源对象 source 的属性和方法都被合并到了一个新的对象里,即 result。在这个过程中,如果源对象和目标对象的键名相同,后面的值会覆盖前面的值。
需要注意的是,当我们将一个对象合并到另一个对象时,合并的过程是浅合并的。也就是说,如果源对象的值是一个对象或数组时,它的值会被引用到目标对象中,而不是被重新创建一份。具体示例可见下面的代码:
-- -------------------- ---- ------- ----- ------ - - -- -- -- - -- -- -- - - -- ----- ------ - - -- - -- - - -- ----- ------ - --------------------- -------- -------------------- -- - -- -- -- - -- - - - -------------------- -- - -- -- -- - -- - - - -------------------- --- ---------- -- ----
在上面的示例中,我们合并了两个对象,其中源对象的 b 属性是一个对象。结果发现目标对象 target 和结果对象 result 的 b 属性引用的是同一个对象,而不是重新创建一个新的。
将源对象拷贝到原型对象中
在 ES7 中,Object.assign() 方法支持将源对象拷贝到原型对象中。这意味着,我们可以创建一个新的对象,并将源对象作为该对象的原型对象。
示例代码:
-- -------------------- ---- ------- ----- ------ - - -- -- -- -- -- - -- ----- --- - ---------------------- ------------------- -- - ------------------- -- - ------------------- -- -
在上面的示例中,我们创建了一个源对象 source,然后使用 Object.create() 方法将其作为原型对象来创建了一个新的对象 obj,最后我们成功地将源对象的属性和方法拷贝到了新的对象 obj 上。需要注意的是,原型对象的属性和方法仅仅是指向源对象上的属性和方法,并不是拷贝一份。
支持 Symbol 属性的复制
在 ES7 中,Object.assign() 方法也支持复制 Symbol 类型的属性。示例如下:
-- -------------------- ---- ------- ----- ------ - --- ----- ------ - - ---------------- ----- -- --------------------- -------- -------------------- -- - ---------------- ----- -
在上面的示例中,我们创建了一个源对象 source,该对象包含了一个 Symbol 类型的属性。我们使用 Object.assign() 方法将源对象拷贝到一个目标对象 target 中,结果发现 Symbol 属性也成功地被拷贝了过来。
需要注意的是,由于 Symbol 类型的属性是唯一且不可枚举的,因此在使用 Object.assign() 方法将它们拷贝到目标对象中时需要特别注意。
总结
Object.assign() 方法是一个非常实用的工具,它可以将多个对象的属性和方法合并到一个对象中,同时支持将源对象拷贝到原型对象中和复制 Symbol 属性。在日常的前端开发中,我们可以灵活运用 Object.assign() 方法,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cf5fe5b5eee0b5256b46c5