Object.setPrototypeOf(this, new.target.prototype)由于此MDN 警告,我对该函数有疑问:
警告:
[[Prototype]]根据现代 JavaScript 引擎优化属性访问的本质,更改对象的 是目前每个浏览器和 JavaScript 引擎中非常缓慢的操作。此外,更改继承的影响是微妙且广泛的,并且不限于在Object.setPrototypeOf(...)语句中花费的时间,而是可能扩展到可以访问已更改的任何对象的任何代码。[[Prototype]]您可以在JavaScript 引擎基础知识:优化原型中阅读更多内容。由于此功能是语言的一部分,因此高性能(理想情况下)实现该功能仍然是引擎开发人员的负担。在引擎开发人员解决此问题之前,如果您担心性能,则应避免设置
[[Prototype]]对象的 。相反,使用所需的[[Prototype]]using创建一个新对象Object.create()。
Object.setPrototypeOf(this, new.target.prototype)那么,在不使用(但使用类)的情况下恢复 TypeScript (Node.js) 中的原型字符串的最佳方法是什么?这都是因为 Express 中实现的错误管理中间件,我需要使用它来instanceof确定错误的来源,从而返回正确的响应,但是每当我创建一个从 Error 扩展的类时,都会error instanceof Error返回 true,但error instanceof CustomError返回 false。经过一些研究,我在官方 TypeScript 文档中发现了这一点:
支持
new.target元
new.target属性是 ES2015 中引入的新语法。当通过 创建构造函数的实例时new, 的值new.target被设置为对最初用于分配实例的构造函数的引用。如果调用函数而不是通过 构造函数new,new.target则设置为undefined。
new.targetObject.setPrototypeOf当或__proto__ …