我有以下代码,可确保 Promise.reject
返回实际的错误对象:
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);
};
然后我遇到了这个link这说明使用 Object.create 会更好。
在这种情况下我将如何使用Object.create
?
最佳答案
该 MDN 链接特别指出:
If you care about performance you should avoid setting the
[[Prototype]]
of an object. Instead, create a new object with the desired[[Prototype]]
usingObject.create()
.
因此,您应该创建一个原型(prototype)为 Error 的新对象,而不是使用文字表达式
,然后在其上设置属性:{ error: true, message: error }
创建一个对象并稍后更改其原型(prototype)。原型(prototype)
const err = Object.create(Error.prototype);
err.error = true;
err.message = error;
关于MDN's Object.create
page ,您可以看到许多正在使用的 Object.create(Foo.prototype)
模式的示例。
关于javascript - 使用 Object.create 而不是 setPrototypeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40428343/