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 —— 访问器属性 这一小节。