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 elthis
valor de una función, estaráundefined
en modo estricto. Claramente lo estás definiendothis
, por lo que no debería ser un problema."-W040":true
la 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
this
dentro algo que, por lo que puede decir, no es un método.En modo no estricto, la llamada
gotoPage(5)
se vincularíathis
al objeto global (window
en el navegador). En modo estricto,this
lo seríaundefined
, y te meterías en problemas.Presumiblemente, quiere llamar a esta función con un
this
contexto 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 usarthis
dentro de algo que obviamente no es un método es bastante confuso. Sería mejor simplemente pasar el objeto como parámetro:fuente
this
termina siendoundefined
, entonces el problema real no es solo una violación de modo estricto . Harían mejor en dar una advertencia diciendo quethis
puede serundefined
cuando están en "modo estricto", lo que lleva aTypeError
(o algo).event.currentTarget
lugar dethis
..jshintrc
para 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
Something
es un constructor debido a la S mayúscula, por lo que debería llamarse usingnew
. Si lo hace, se definethis
como 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.