对象中的扩展运算符
不能复制继承自原型对象的属性
let o1 = { a: 1 };let o2 = { b: 2 };o2.__proto__ = o1;let { ...o3 } = o2;o3 // { b: 2 }o3.a // undefined
可以读取继承自原型对象的属性 ```javascript const o = Object.create({ x: 1, y: 2 }); o.z = 3;
let { x, …{ y, z } } = o; x // 1 y // undefined z // 3
- 只能 copy 可枚举属性```javascriptconst obj = Object.defineProperty({ a: 1 }, 'b', {enumerable: false,value: 2})const cpObj = { ...obj }obj.a // 1obj.b // 2cpObj.a // 1cpObj.b // undefined描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表示某些操作会忽略当前属性目前,有四个操作会忽略enumerable为false的属性。for...in循环; Object.keys(); JSON.stringify(); Object.assign()
- 如果想完整克隆一个对象,还拷贝对象原型的属性,可以采用下面的写法 ```javascript // 写法1 const clone1 = Object.assign( Object.create(Object.getPrototypeOf(obj)), obj );
// 写法2 const clone2 = Object.create( Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj) ) ```
