jshint期望函数的新“前缀”

时间:2012-05-19 19:13:14

标签: javascript jshint

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 );
}

2 个答案:

答案 0 :(得分:71)

如果启用了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"

答案 1 :(得分:6)

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