Je pense que cela peut être une copie de Violation stricte utilisant ce mot clé et révélant 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. Il dit "violation stricte". pour la ligne en surbrillance:
Est-ce que mon utilisation de Function.call()
et la référence à l'instance sont inappropriées?
Est-ce considéré comme un mauvais style?
JSHint dit "possible violation stricte" parce que vous utilisez this
à l'intérieur de quelque chose qui, pour autant que cela puisse dire, n'est pas une méthode.
En mode non strict, l'appel de gotoPage(5)
lie this
à l'objet global (window
dans le navigateur). En mode strict, this
serait undefined
et vous auriez des problèmes.
Vous voulez probablement appeler cette fonction avec un contexte lié this
, par ex. gotoPage.bind(myObj)(5)
ou gotoPage.call(myObj, 5)
. Si tel est le cas, vous pouvez ignorer JSHint, car vous ne générerez aucune erreur. Mais cela vous dit que votre code n’est pas clair pour quiconque le lirait, car utiliser this
à l'intérieur de quelque chose qui n'est manifestement pas une méthode est assez déroutant. Il serait préférable de simplement passer l'objet en tant que 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 reçu ce message pour une fonction qui ne commence pas par 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 en tant que variable au lieu d'utiliser la déclaration de fonction standard, jshint ne l'indiquera pas 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 voudrez peut-être affecter au prototype:
ExampleClassName.protytpe.gotoPage = function gotoPage(s){
// code using this
};
JSHint ne préviendra pas lorsque la fonction est assignée.