Pourquoi JSHINT se plaint - il qu'il s'agit d'une violation stricte?
je pense que cela peut être un duplicata de Violation stricte en utilisant ce mot clé et de révéler le modèle de module
j'ai ce code:
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);
}
et JSHINT (JSLINT) se plaint. C'est écrit " violation stricte."pour la ligne en surbrillance:
est mon utilisation de Function.call()
et en faisant référence à l'instance, quelque chose d'inapproprié?
est-ce considéré comme un mauvais style?
4 réponses
JSHint dit" violation stricte Possible "parce que vous utilisez this
à l'intérieur de quelque chose qui, pour autant qu'il puisse dire, n'est pas une méthode.
en mode non-strict, appelant gotoPage(5)
lierait this
à l'objet global ( window
dans le navigateur). En mode strict, this
serait undefined
, et vous auriez des problèmes.
probablement, vous voulez dire appeler cette fonction avec un contexte lié this
, par exemple gotoPage.bind(myObj)(5)
ou gotoPage.call(myObj, 5)
. Si c'est le cas, vous pouvez ignorer JSHint, car vous ne générerez pas d'erreurs. Mais, il vous dit que votre code n'est pas clair pour quiconque le lit, parce que l'utilisation de this
à l'intérieur de quelque chose qui n'est pas évidemment une méthode est assez déroutante. Il serait préférable de simplement passer l'objet comme paramètre:
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);
}
j'ai eu ce message pour une fonction qui n'a pas commencer avec une lettre majuscule.
"use strict";
// ---> strict violation
function something() {
this.test = "";
}
// ---> just fine (note the capital S in Something)
function Something() {
this.test = "";
}
si vous déclarez la fonction comme une variable au lieu d'utiliser la déclaration de fonction standard, jshint ne signalera pas cette violation comme une violation stricte. Donc vous pouvez faire ce qui suit -
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 vous essayez d'implémenter une méthode, vous pourriez vouloir affecter au prototype à la place:
ExampleClassName.protytpe.gotoPage = function gotoPage(s){
// code using this
};
JSHint ne prévient pas quand la fonction est assignée.