javascript - 使用 Object.create 而不是 setPrototypeof

标签 javascript javascript-objects

我有以下代码,可确保 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]] using Object.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/

相关文章:

javascript - 单击时切换音频?

javascript - 如何清空一个JS对象?

javascript - 为什么 sessionStorage 跨多个选项卡保留?

javascript - 声明 JavaScript 数组时 “{}” 和 “[]” 有什么区别?

javascript - 根据 id 在 javascript 中的对象数组中替换特定对象

javascript - 如何允许过滤器 bool 值是非互斥的?

javascript - 如何将路径数组转换为JSON结构?

javascript - 如何使用存储在 Blob 中的 webfont 数据

javascript - ng-include 不会每次使用 $scope 都渲染部分 View

javascript - jquery textarea 调整宽度和高度