Creo que esto puede ser un duplicado de la infracción estricta al usar esta palabra clave y revelar el patrón del módulo
Tengo este codigo:
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 "Violación estricta". para la línea resaltada:

¿Mi uso Function.call()y luego hacer referencia a la instancia es inapropiado de alguna manera?
¿Se considera esto de mal estilo?
javascript
jslint
strict
jshint
Cheeso
fuente
fuente

this. No tengo idea de por qué JSLint lo llamaría una infracción estricta, pero sí sé que si no define elthisvalor de una función, estaráundefineden modo estricto. Claramente lo estás definiendothis, por lo que no debería ser un problema."-W040":truela configuración JSON, pero como JSON no tiene comentarios, no se puede decir a nadie por qué está ahí.Respuestas:
JSHint dice "Posible violación estricta" porque está usando
thisdentro algo que, por lo que puede decir, no es un método.En modo no estricto, la llamada
gotoPage(5)se vincularíathisal objeto global (windowen el navegador). En modo estricto,thislo seríaundefined, y te meterías en problemas.Presumiblemente, quiere llamar a esta función con un
thiscontexto enlazado , por ejemplo,gotoPage.bind(myObj)(5)ogotoPage.call(myObj, 5). Si es así, puede ignorar JSHint, ya que no generará ningún error. Pero te está diciendo que tu código no es claro para cualquiera que lo lea, porque usarthisdentro de algo que obviamente no es un método es bastante confuso. Sería mejor simplemente pasar el objeto como parámetro:fuente
thistermina siendoundefined, entonces el problema real no es solo una violación de modo estricto . Harían mejor en dar una advertencia diciendo quethispuede serundefinedcuando están en "modo estricto", lo que lleva aTypeError(o algo).event.currentTargetlugar dethis..jshintrcpara deshabilitar esta verificación?/* jshint validthis: true */si solo tiene un par y no desea cambiar para cada caso.Recibí este mensaje para una función que no comenzaba con mayúscula.
fuente
Somethinges un constructor debido a la S mayúscula, por lo que debería llamarse usingnew. Si lo hace, se definethiscomo un objeto nuevo basado en 'Something.prototype'. Lo más probable es que se deba a esa suposición que no genera la posible advertencia de violación estricta.Si declara la función como una variable en lugar de usar la declaración de función estándar, jshint no marcará esto como una violación estricta. Entonces puede hacer lo siguiente:
fuente
Si está intentando implementar un método, es posible que desee asignarlo al prototipo:
JSHint no advertirá cuando se asigne la función.
fuente
ClassName.prototype.myMethod = myMethod;, luego definió el método a continuación. Aún recibe un error aunque myMethod esté correctamente vinculado.