2012-05-19 37 views
35

CSiginInCSignUpCTryItCBlocks新“字头”的所有功能宣布为jshint预计,功能

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

回答

67

如果newcap启用,JSHint预计功能开始用大写字母是构造函数,因此与new关键字调用。

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

documentation

此选项要求你能够利用的构造函数的名称。预计要与new运算符一起使用的函数大小只是一种约定,可帮助程序员在使用this时,将构造函数与其他类型的函数进行可视化区分以帮助发现错误。

不这样做不会打破任何浏览器或环境的代码,但是这将是一个有点难以弄清楚,通过阅读代码,如果本来的功能,有或没有new使用。这很重要,因为当new打算使用的功能没有它时,this将指向全局对象而不是新对象。

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

new MyConstructor(); // -> [MyConstructor] 
MyConstructor();  // -> [DOMWindow] 

有关this是如何工作的,由耶胡达·卡茨阅读Understanding JavaScript Function Invocation and "this"一个更深入的了解。

+1

O.K.我不想混淆别人,所以我可能会失去帽子..感谢信息。 –

6

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