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.