是否可以测试 javascript 函数是否为构造函数?

Is it possible to test if a javascript function is a constructor?

我想测试一个函数是一个构造函数(意味着用 new 调用),还是一个应该按字面调用的常规函数​​。

这很可能是不可能的,我找不到任何关于此事的信息,但想看看是否可能只是为了好玩

这是我目前进行的基本检查:

function isConstructor(func) {
  // Ensure it is a function...
  if (typeof func !== 'function') {
    return false;
  }

  // Check for at least one custom property attached to the prototype
  for (var prop in func.prototype) {
    if (func.prototype.hasOwnProperty(prop)) {
      return true;
    }
  }

  // No properties were found, so must not be a constructor.
  return false;
}

注意:这是一个好奇心的问题,不是必需的。请不要说 "that's a bad unit test" 或 "is it really worth it?"。这只是一个有趣的练习,看看有什么可能(尽管 bad/unreasonable/not-to-be-used)。

这是不可能的,因为 Javascript 中的任何函数都可以 成为构造函数。您可以调用任何以 new 开头的函数以使其 this 指向一个新对象,就像您可以 .call 任何函数以使其 this 指向您想要的任何对象一样.