Object.assign方法的用法
Object.assign方法是ES6新增的一个api,它的作用是用来将源对象(source)的所有可枚举属性,复制到目标对象(target)。Object.assign方法实际上是浅拷贝,它只拷贝源对象的自身属性(不拷贝继承属性),而且只拷贝可枚举的属性(不拷贝不可枚举的属性)。
Object.assign方法的语法如下:
Object.assign(target, ...sources)
其中,target是目标对象,sources是源对象。Object.assign方法会遍历sources中的所有可枚举属性,将它们复制到target中。如果目标对象中的属性具有相同的键,则后面的属性会覆盖前面的属性。
Object.assign方法的一个典型应用是为对象添加属性,如:
const obj = {}; Object.assign(obj, {a: 1, b: 2}); // obj有两个属性a和b
Object.assign方法还可以用来合并多个对象,如:
const obj1 = {a: 1, b: 2}; const obj2 = {c: 3, d: 4}; const obj3 = {e: 5, f: 6}; const obj = Object.assign(obj1, obj2, obj3); // obj有六个属性a、b、c、d、e、f
Object.assign方法还可以用来克隆一个对象,如:
const obj1 = {a: 1, b: 2}; const obj2 = Object.assign({}, obj1); // obj2是obj1的一个克隆
Object.assign方法还可以用来将原型属性拷贝到另一个对象,如:
const obj1 = {a: 1, b: 2}; const obj2 = Object.assign({}, Object.getPrototypeOf(obj1)); // obj2是obj1的原型对象
Object.assign方法还可以用来为函数的参数设置默认值,如:
function foo(opts = {}) { const options = Object.assign({}, {a: 1, b: 2}, opts); // options有三个属性a、b、opts }
Object.assign方法还可以用来将数组转换为对象,如:
const arr = [["a", 1], ["b", 2]]; const obj = Object.assign({}, arr); // obj有两个属性a和b
Object.assign方法还可以用来将类数组对象转换为真正的数组,如:
const arrLike = {0: "a", 1: "b", length: 2}; const arr = Array.from(Object.assign([], arrLike)); // arr是一个包含两个元素的数组
Object.assign方法的用法很多,它可以用来实现很多有用的功能,它是一个非常有用的api。