validthis true sublime react maxdepth jshintrc cant javascript jslint strict jshint

javascript - true - ¿Por qué JSHINT se queja de que esto es una violación estricta?



jshintrc (4)

Creo que esto puede ser un duplicado de la Infracción Estricta usando esta palabra clave y revelando un patrón de módulo

Tengo este código:

function gotoPage(s){ if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);} } function pageChange(event, sorter) { var dd = event.currentTarget; gotoPage.call(sorter, dd[dd.selectedIndex].value); }

Y JSHINT (JSLINT) se queja. Dice "Estricta violación". para la línea resaltada:

¿Es mi uso de Function.call() y luego haciendo referencia a la instancia, de alguna manera inapropiado?

¿Esto es considerado como un mal estilo?


He recibido este mensaje para una función que no comenzó con una letra mayúscula.

"use strict"; // ---> strict violation function something() { this.test = ""; } // ---> just fine (note the capital S in Something) function Something() { this.test = ""; }


JSHint dice "Posible violación estricta" porque estás usando this dentro de algo que, por lo que puede decir, no es un método.

En modo no estricto, al llamar a gotoPage(5) se vincularía this con el objeto global ( window en el navegador). En modo estricto, this sería undefined , y te meterías en problemas.

Presumiblemente, quiere llamar a esta función con un límite de this contexto, por ejemplo, gotoPage.bind(myObj)(5) o gotoPage.call(myObj, 5) . Si es así, puede ignorar JSHint, ya que no generará ningún error. Pero, le está diciendo que su código no está claro para cualquiera que lo lea, porque usarlo dentro de algo que obviamente no es un método es bastante confuso. Sería mejor simplemente pasar el objeto como un parámetro:

function gotoPage(sorter, s) { if (s <= sorter.d && s > 0) { sorter.g = s; sorter.page((s - 1) * sorter.p.size); } } function pageChange(event, sorter) { var dd = event.currentTarget; gotoPage(sorter, dd[dd.selectedIndex].value); }


Si declara la función como una variable en lugar de usar la declaración de función estándar, jshint no lo marcará como una violación estricta. Entonces puedes hacer lo siguiente:

var gotoPage = function (s){ if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);} }; var pageChange = function (event, sorter) { var dd = event.currentTarget; gotoPage.call(sorter, dd[dd.selectedIndex].value); };


Si intentas implementar un método, quizás quieras asignarle el prototipo:

ExampleClassName.protytpe.gotoPage = function gotoPage(s){ // code using this };

JSHint no avisará cuando se está asignando la función.