Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Object.assign() 静态方法将一个或者多个源对象中所有可枚举的自有属性复制到目标对象,并返回修改后的目标对象。
需要应用源对象属性的目标对象,修改后将作为返回值。
sources一个或多个包含要应用的属性的源对象。
修改后的目标对象。
如果目标对象与源对象具有相同的键(属性名),则目标对象中的属性将被源对象中的属性覆盖,后面的源对象的属性将类似地覆盖前面的源对象的同名属性。
Object.assign() 方法只会拷贝源对象可枚举的的自有属性到目标对象。该方法在源对象上使用 [[Get]],在目标对象上使用 [[Set]],因此它会调用 getter 和 setter。故它对属性进行赋值,而不是复制或定义新的属性。如果合并源对象包含 getter 的新属性到原型中,则可能不适合使用此方法。
如果要将属性定义(包括它们的可枚举性)复制到原型中,则应改用 Object.getOwnPropertyDescriptor() 和 Object.defineProperty() 方法。
如果赋值期间出错,例如如果属性不可写,则会抛出 TypeError;如果在抛出异常之前已经添加了一些属性,则这些属性会被保留,而 target 对象也会被修改。
针对深拷贝,需要使用其他办法,因为 Object.assign() 只复制属性值。
假如源对象是一个对象的引用,它仅仅会复制其引用值。
属性会被后续参数中具有相同属性的其他对象覆盖。
| ECMAScript® 2027 Language Specification # sec-object.assign |
启用 JavaScript 以查看此浏览器兼容性表。