首页 > 解决方案 > JavaScript/NodeJS:检查 instanceof 的父方法

问题描述

在 Solid 的 NodeJS 实现中,我可以看到以下内容:

module.exports = HTTPError

function HTTPError (status, message) {
  if (!(this instanceof HTTPError)) {
    return new HTTPError(status, message)
}

这背后的意义何在?在哪种情况下,所说的方法实例不会通过instanceof检查?我认为这不是多余的,正如我现在所想的那样,但找不到背后的逻辑。

链接到 GitHub 上提到的代码

标签: javascriptnode.jsinstanceof

解决方案


差异取决于new关键字的存在。考虑以下示例:

function HTTPError(status, message) {
  if (!(this instanceof HTTPError)) {
    console.log("called without new. Status is " + status);
    return new HTTPError(status, message)
  } else {
    console.log("called with new. Status is " + status);
  }
  this.status = status;
}

const i = HTTPError(500);
const i2 = new HTTPError(400);
console.log(i);
console.log(i2);


推荐阅读