>使用展开运算符是一种简洁的方式来组合由其他对象属性的聚合组成的对象。
但是,是否有简洁且高性能的方法来使用展开运算符设置对象的原型?
目前我有:
const result = Object.assign(Object.create(EmailCampaign.prototype), properties)
。它将从数据库查询返回的属性扩展到具有EmailCampaign
原型的对象中。有没有办法使用展开运算符设置对象原型?
这是可能的:
const result = Object.setPrototypeOf({...properties}, EmailCampaign.prototype);
然而,在性能方面,在实例化后设置对象的原型是不可取的。我正在寻找另一种方式,如果存在的话。
使用 Object.assign
+ Object.create
是正确且高性能的解决方案。你应该使用它。如果要使其更简洁,请使用将两者组合在一起的帮助程序函数。
也就是说,在对象文字上调用Object.setPrototypeOf
并不是那么慢,因为该对象尚未在其他地方使用。
有没有办法使用展开运算符设置对象原型?
如果你想使用官方弃用的功能,你可以在对象初始化器中使用 __proto__
属性:
const result = {__proto__: EmailCampaign.prototype, ...properties};
所以是的,这是可能的,但我绝对不会推荐它。