2012-05-19 3 views
35

CSiginIn, CSignUp, CTryIt, CBlocks에 대한 새로운 '접두사'모든 기능을 jshint 아직 JSHint 내가 '새' '접두사'를 놓치고 있다고 말한다 기능

function CSignIn(){//stuff here} 

같은

로 선언 기대하고있다. 이 문제를 해결하려면 어떻게해야합니까?

이들은 모듈 패턴 내부의 기능입니다. 또한, 내가했던 함수의 끝에 배치 한 세미콜론을 제거하도록 요청하고 있습니다. newcap가 활성화되어

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

경우

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

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

     if(page == 1) 
     { 
      CSignIn(); 
      CSignUp(); 
      CTryIt(); 
      CBlocks(); 
     } 

기능 예 ..., JSHint 함수가 생성자로 대문자로 시작하고, 따라서 new 키워드를 호출 할 것으로 기대하고있다.

해결책 :이 옵션을 비활성화하거나 함수 이름을 바꿉니다. documentation에서

:

이 옵션은 생성자 함수의 이름을 투자 할 필요합니다. new 연산자와 함께 사용하려는 함수를 대문자로 사용하는 것은 프로그래머가 생성자 함수를 다른 유형의 함수와 시각적으로 구별하여 this을 사용할 때 실수를 찾아내는 데 도움이되는 규칙입니다.

아무 브라우저 나 환경에서도 코드가 깨지지는 않지만 코드를 읽으면 알아 내기가 더 어려울 것입니다. 기능이 new과 함께 사용되었거나 사용되지 않아야하는 경우입니다. new과 함께 사용하려는 기능을 사용하지 않으면 this이 새 개체 대신 전역 개체를 가리 키기 때문에이 작업이 중요합니다. this 작품, 예후 다 카츠에 의해 Understanding JavaScript Function Invocation and "this"을 읽는 방법에 대한보다 깊이있는 이해를 돕기 위하여

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

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

.

+1

O.K. 다른 사람들을 혼동하고 싶지 않아서 대문자를 잃어 버리게 될 것입니다. 정보에 대한 감사합니다. –

6

Felix Kling이 이미 올바른 답을주었습니다. 완전성을 위해 newcap은 기본값이 true (문서에는 상태가 표시되지 않지만 source code에서 읽을 수 있음). 즉, JSHint 옵션에서 newcap: true 설정을 삭제해도 경고가 비활성화되지 않으므로 newcap: false을 명시 적으로 설정해야합니다.

관련 문제