【问题标题】:jshint expects the new 'prefix' for functionsjshint 期望函数有新的“前缀”
【发布时间】:2012-05-26 22:36:14
【问题描述】:

CSiginInCSignUpCTryItCBlocks 都是这样声明的函数

function CSignIn(){//stuff here}

然而 JSHint 说我缺少“新”“前缀”。我该怎么做才能解决这个问题?

它们只是模块模式中的函数。此外,它要求我删除放在我已完成的函数末尾的分号。

var Control = ( function () 
{

    /**
     *Publik
     */

    var publik = function ( page )
    {
        // page 1 initialization

        if( page == 1 )
        {
            CSignIn();
            CSignUp();
            CTryIt();
            CBlocks();
        }

函数示例...

function CTryIt()
{
    // pull elements

    var tryit_button = document.getElementById( 'tryit_button' );

    // initialize access to Model

    tryit_button.addEventListener( "click", function( )
    { 
        new AjaxRequest().invoke( 'ajax_type=ControlTryIt', 
        function( server_response_text ) 
        { 
            new AjaxResponse( server_response_text, 'page_change' ); 
        } ); 

    }, false );
}

【问题讨论】:

    标签: javascript jshint


    【解决方案1】:

    Felix Kling 已经给了你正确的答案。为了完整起见,我会注意到newcap 默认为true(文档没有说明,但您可以在source code 中阅读)。这意味着删除 JSHint 选项中的设置 newcap: true 不会禁用警告:相反,您需要显式设置 newcap: false

    【讨论】:

      【解决方案2】:

      如果启用newcap,JSHint 期望以大写字母开头的函数是构造函数,因此使用new 关键字调用。

      解决方案:禁用此选项或重命名您的函数。

      来自documentation

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

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

      function MyConstructor() {
          console.log(this);
      }
      
      new MyConstructor(); // -> [MyConstructor]
      MyConstructor();     // -> [DOMWindow]
      

      要更深入地了解 this 的工作原理,请阅读 Yehuda Katz 的 Understanding JavaScript Function Invocation and "this"

      【讨论】:

      • 好的。我不想混淆其他人,所以我可能会松开帽子......谢谢你的信息。
      猜你喜欢
      • 2015-02-07
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多