Javascript 使用Object.create而不是setPrototypeof

Javascript 使用Object.create而不是setPrototypeof,javascript,javascript-objects,Javascript,Javascript Objects,我有以下代码确保承诺。拒绝返回实际错误对象: export const rejectWithAnError = function(error) { if(error.constructor === Error) { return Promise.reject(error); } const err = { error: true, message: error }; Object.setPrototypeOf(err, new Error()); return Pr

我有以下代码确保
承诺。拒绝
返回实际错误对象:

export const rejectWithAnError = function(error) {
  if(error.constructor === Error) {
    return Promise.reject(error);
  }

  const err = { error: true, message: error };
  Object.setPrototypeOf(err, new Error());
  return Promise.reject(err);
};
然后我遇到了这样一个问题,即使用Object.create会更好


如何使用
对象。在此场景中创建

原型设置为
错误。原型设置为
,将
消息设置为对象,将对象的
值设置为消息,当调用
err.message
作为参数的
err.constructor
时应显示该消息

var err=Object.create(Error.prototype{
信息:{
值:“错误”
},
错误:{
值:true
}
})
Promise.reject(err.constructor([err.message,err.error]))
.then(数据=>console.log(数据))

.catch(e=>console.log(e,e.message)),MDN链接特别指出:

如果您关心性能,则应避免设置对象的
[[Prototype]]
。相反,使用
object.create()
使用所需的
[[Prototype]]]
创建一个新对象

因此,您不应该使用文本表达式
{error:true,message:error}
创建一个对象并在以后更改其原型,而应该创建一个原型为
error.prototype
的新对象,然后对其设置属性:

const err = Object.create(Error.prototype);
err.error = true;
err.message = error;

在上,您可以看到大量正在使用的
Object.create(Foo.prototype)
模式的示例。

为什么不使用?我可以使用新错误,但这是一个学习练习