【问题标题】:Error : missing new prefix when invoking a constructor错误:调用构造函数时缺少新前缀
【发布时间】:2014-02-06 06:01:50
【问题描述】:

我正在尝试在node.js 中创建一个函数。以下是相关代码,当我调用函数时它给我错误。

function ReplacePlaceholders() {
            return 'success';
          }      



  exports.sendMailMsg = function (templateName, receiverEmail, dataPlaceholders) {

        ReplacePlaceholders();
}

【问题讨论】:

  • 除非ReplacePlaceholders()exports.sendMailMsg 不在同一范围内,或者除非exports 不是对象,否则您在此处显示的代码没有任何问题。你得到什么具体错误?

标签: javascript node.js angularjs


【解决方案1】:

在 node.js 中,函数名是驼峰式的,并且应该以小写字符开头。以大写字符开头的函数告诉 JSHint 将该函数视为构造函数而不是方法。

这实际上是由 JSHint 产生的错误,但代码会正常运行。 The option in JSHintnewcap,导致这个错误其实是贬值了,建议禁用。

关于为什么这个选项甚至在 JSHint 中的相关信息:

此选项要求您将构造函数的名称大写。将打算与 new 运算符一起使用的函数大写只是一种约定,它可以帮助程序员在视觉上区分构造函数和其他类型的函数,以帮助在使用 this 时发现错误。

不这样做不会在任何浏览器或环境中破坏您的代码,但是通过阅读代码来确定该函数是否应该与new一起使用会有点困难。这很重要,因为当原本打算与 new 一起使用的函数在没有它的情况下使用时,this 将指向全局对象而不是新对象。

【讨论】:

  • 感谢 frnd...我为这个简单的事情浪费了半天时间...!
  • 这根本不是真的。 Javascript 是区分大小写的,但是 Javascript 不会以任何不同的方式对待函数,无论它是否以大写字母开头 - 不会因为某些内容以大写字母开头而分配特殊行为。有一些风格约定以某种方式使用大写,但这些纯粹是关于如何使用该语言的风格意见。
  • node.js 及其关联的 linting 会抛出错误并且无法正确处理代码。虽然这主要是一种风格观点,但 node.js 希望你遵循他们的风格。我或许应该更清楚地说明这是 node.js,而不是通用 JavaScript
  • 不,这段代码在 Node.js 中运行良好。 Node.js 不会强迫您遵循该约定。错误/警告消息可能来自 JSHint,可以在您的文本编辑器中进行配置。
【解决方案2】:

您提到的错误消息是 JSHint 错误消息,而不是运行时错误。这里有一个讨论:

jshint expects the new 'prefix' for functions

JSHint 期望以大写字母开头的函数是对象定义。您可以忽略该错误,在 JSHint 中禁用它,或重命名您的函数,使其以小写字母开头。

【讨论】:

    【解决方案3】:

    我不确定为什么会这样,但该错误表明执行new ReplacePlaceholders(); 可能有效。不过,您可能需要考虑以下内容:

    function ReplacePlaceholders(templateName, receiverEmail, dataPlaceholders) {
      return 'success';
    }
    
    exports.sendMailMsg = ReplacePlaceholders;
    

    【讨论】:

      猜你喜欢
      • 2015-02-07
      • 1970-01-01
      • 2022-06-29
      • 2016-03-08
      • 1970-01-01
      • 2020-07-05
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多