jshint期望函数的新"前缀"

CS_*_*013 35 javascript jshint

CSiginIn,CSignUp,CTryIt,CBlocks是所有功能宣布为

function CSignIn(){//stuff here}
Run Code Online (Sandbox Code Playgroud)

然而JSHint说我错过了'新''前缀'.我该怎么做才能解决这个问题?

它们只是模块模式中的函数.另外,它要求我删除我在功能结束时放置的分号.

var Control = ( function () 
{

    /**
     *Publik
     */

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

        if( page == 1 )
        {
            CSignIn();
            CSignUp();
            CTryIt();
            CBlocks();
        }
Run Code Online (Sandbox Code Playgroud)

功能示例......

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 );
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 72

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

解决方案:禁用此选项或重命名您的功能.

文档:

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

不这样做不会破坏你在任何浏览器或环境中的代码,但是通过读取代码会有点难以理解 - 如果该函数应该使用或不使用new.这很重要,因为在new没有它的情况下使用要使用的函数时,this将指向全局对象而不是新对象.

function MyConstructor() {
    console.log(this);
}

new MyConstructor(); // -> [MyConstructor]
MyConstructor();     // -> [DOMWindow]
Run Code Online (Sandbox Code Playgroud)

有关如何this工作的更深入的理解,请阅读理解JavaScript函数调用和 Yehuda Katz的"this".


GOT*_*O 0 6

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