CSiginIn
,CSignUp
,CTryIt
,CBlocks
都是声明为此类的函数
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 );
}
答案 0 :(得分:71)
如果启用了newcap
,JSHint希望以大写字母开头的函数是构造函数,因此需要使用new
关键字调用。
解决方案:禁用此选项或重命名您的功能。
此选项要求您大写构造函数的名称。旨在与
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
。