2012-05-19 7 views
35

CSiginIn, CSignUp, CTryIt, CBlocks se declaran todas las funciones como taljshint espera que el nuevo 'prefijo' para funciones

function CSignIn(){//stuff here} 

todavía JSHint dice que me falta el 'nuevo' 'prefijo'. ¿Qué puedo hacer para arreglar esto?

Son solo funciones dentro del patrón del módulo. Además, me está pidiendo que elimine los puntos y comas que había colocado al final de la función que he hecho.

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

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

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

Función Ejemplo ...

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

Respuesta

67

Si newcap está habilitado, JSHint espera funciones comienzan con una letra mayúscula para ser constructores y por lo tanto a ser llamados con la palabra clave new.

Solución: O deshabilite esta opción o cambie el nombre de sus funciones.

Desde el documentation:

Esta opción requiere capitalizar los nombres de las funciones constructoras. Las funciones de capitalización que están destinadas a ser utilizadas con el operador new son solo una convención que ayuda a los programadores a distinguir visualmente las funciones del constructor de otros tipos de funciones para ayudar a detectar errores al usar this.

Si no lo hace, no se romperá el código en ningún navegador o entorno, pero será un poco más difícil de entender, leyendo el código, si se supone que la función se debe usar con o sin new. Y esto es importante porque cuando la función que se pretendía usar con new se utiliza sin ella, this apuntará al objeto global en lugar de a un nuevo objeto.

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

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

Para una comprensión más profunda de cómo funciona this, leen Understanding JavaScript Function Invocation and "this" por Yehuda Katz.

+1

O.K. No quiero confundir a los demás, así que es probable que pierda las tapas ... gracias por la información. –

6

Felix Kling ya le dio la respuesta correcta. Para completar, me gustaría señalar que newcap se establece de manera predeterminada en true (La documentación no lo indica, pero puede leerlo en el source code). Esto significa que al eliminar la configuración newcap: true en las opciones de JSHint no se desactivará la advertencia: en su lugar, debe establecer explícitamente newcap: false.

Cuestiones relacionadas