Object spread vs. Object.assign:
For the most part object reset and spread work the same way, the key difference is that spread defines properties, whilst Object.assign() sets them. This means Object.assign() triggers setters.
最主要的区别是Object.assign设置属性时会触发setter:
Object.assign(
{
set a(v) { this.b = v },
b: 2
},
{ a: 4 }
)
// { b: 4 }
{
...{
set a(v){ this.b = v },
b:2
},
...{ a: 4 }
}
// { a: 4, b: 2 }
PS: 上面的 setter/getter 是字面量写法,与使用 Object.defineProperty() 来定义是一样的。,可参阅 《JavaScript 高级程序设计》P141 —— 访问器属性 这一小节。