一、Object.assign(targetObj, sourceObj1, sourceObj2, ...)。复制一个或者多个源对象的属性到目标对象,前者对象跟后者对象具有相同的属性的话,会被后者属性覆盖,返回值也是目标对象。这个方法不能够用来解决深度拷贝问题。假如源对象的属性值是一个对象的引用,那目标对象的属性值也将指向那个对象的引用,这种情况下,不管是修改源对象的属性值还是修改目标对象的属性值,另外一个值都会相应的改变。可以使用下面的第二点来进行深度拷贝。

 

二、JSON.parse(JSON.stringify(sourceObj))。返回值就是源对象的一个深度拷贝。返回对象跟源对象互不影响。

 

三、Object.create(protoObj[, propertiesObj])。[]代表可选。返回值的_proto_指向protoObj。第二个参数属性对象可以给返回值添加属性,默认属性是不可枚举的。没有第二个参数的话,返回值是一个空对象。(propertiesObj的写法:属性的值是属性描述符 {a: {value: 111}, b: {value: 222, enumerable: true}})

 

四、可以使用new Object()创建对象。使用字面量创建对象。

 

五、对象的属性描述符有两种:数据描述符和存取描述符。例子:数据描述符{value: 111, writable: true, enumerable: true, configurable: true}。存取描述符{get: function () { return 111 }, set: function (newVal) {// 赋值操作}, enumerable: true, configurable: true}。

 

六、使用Object.defineProperty(targetObj, key, propDescriptor)。给目标对象定义或者修改一个属性。第二个参数是属性名。第三个参数是属性描述符。

 

七、使用Object.defineProperties(targetObj, props)。给目标对象定义或者修改一个或者多个属性。第二个参数是一个属性对象,属性对象的属性值是一个属性描述符。