97 votes

Pourquoi JSHINT se plaint-il qu'il s'agit d'une violation stricte?

Je pense que cela peut être un doublon de Stricte Violation à l'aide de ce mot-clé et de révéler le motif 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) est de se plaindre. Il dit "Strict violation." pour la ligne sélectionnée:

enter image description here

Mon utilisation de l' Function.call() puis de référencement de l'instance, d'une certaine manière inappropriée?

Est-ce considéré comme de mauvais goût?

124voto

Domenic Points 40761

JSHint dit "Possible stricte violation" parce que vous êtes à l'aide de this à l'intérieur de quelque chose qui, aussi loin qu'il peut dire, n'est pas une méthode.

Non le mode strict, appelant gotoPage(5) lier this à l'objet global (window dans le navigateur). En mode strict, this serait undefined, et vous obtenez en difficulté.

Sans doute, vous voulez dire d'appeler cette fonction avec une borne this contexte, par exemple, gotoPage.bind(myObj)(5) ou gotoPage.call(myObj, 5). Si oui, vous pouvez ignorer JSHint, que vous ne serez pas générer d'erreur. Mais, c'est vous dire que votre code n'est pas clair pour toute personne lisant, parce que l'utilisation d' this à l'intérieur de quelque chose qui n'est évidemment 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);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X