jshint期望新的“前缀”的function

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

如果启用了newcapnewcap希望以大写字母开头的函数是构造函数,因此可以用new关键字来调用。

解决scheme :禁用此选项或重命名您的function。

从文档 :

这个选项需要大写构造函数的名字。 使用new操作符的函数大写只是一个约定,可以帮助程序员直观地将构造函数与其他types的函数区分开来,以便在使用this函数时发现错误。

不这样做不会破坏你的代码在任何浏览器或环境中,但是通过阅读代码将会有点困难 – 如果该函数应该被使用或不使用new 。 这一点很重要,因为如果没有使用new的函数,它将指向全局对象而不是新对象。

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

为了更深入地了解它是如何工作的,请阅读Yehuda Katz的“理解JavaScript函数调用”和“this” 。

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