Je pense que cela peut être un double de Strict Violation en utilisant ce mot-clé et un modèle de module révélateur
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()
l'instance, puis la référencer, est en quelque sorte inappropriée?
Est-ce considéré comme un mauvais style?
javascript
jslint
strict
jshint
Cheeso
la source
la source
this
. Je ne sais pas pourquoi JSLint l'appellerait une violation stricte, mais je sais que si vous ne définissez pas lathis
valeur d'une fonction, elle seraundefined
en mode strict. Vous définissez clairementthis
, donc cela ne devrait pas être un problème."-W040":true
dans la configuration json, mais comme json n'a pas de commentaires, vous ne pouvez dire à personne pourquoi il est là.Réponses:
JSHint dit "Violation stricte possible" parce que vous utilisez à l'
this
intérieur quelque chose qui, pour autant qu'il sache, n'est pas une méthode.En mode non strict, l'appel
gotoPage(5)
serait liéthis
à l'objet global (window
dans le navigateur). En mode strict, cethis
seraitundefined
et vous auriez des ennuis.Vraisemblablement, vous voulez appeler cette fonction avec un
this
contexte lié , par exemplegotoPage.bind(myObj)(5)
ougotoPage.call(myObj, 5)
. Si tel est le cas, vous pouvez ignorer JSHint, car vous ne générerez aucune erreur. Mais cela vous indique que votre code n'est pas clair pour quiconque le lit, car utiliser à l'this
intérieur de quelque chose qui n'est manifestement pas une méthode est assez déroutant. Il vaudrait mieux passer simplement l'objet en paramètre:la source
this
cela finit par l'êtreundefined
, le problème réel n'est pas seulement une violation de mode strict . Ils feraient mieux de donner un avertissement en disant que celathis
peut êtreundefined
en "mode strict", conduisant à unTypeError
(ou quelque chose).event.currentTarget
place dethis
..jshintrc
pour désactiver cette vérification?/* jshint validthis: true */
si vous n'en avez que quelques-uns et que vous ne voulez pas changer pour chaque cas.J'ai eu ce message pour une fonction qui ne commençait pas par une majuscule.
la source
Something
s'agit d'un constructeur en raison du capital S, et devrait donc être appelé usingnew
. Cela définitthis
être un nouvel objet basé sur «Something.prototype». C'est probablement en raison de cette hypothèse que cela ne soulève pas l'avertissement de violation stricte possible.Si vous déclarez la fonction comme une variable au lieu d'utiliser la déclaration de fonction standard, jshint ne marquera pas cela comme une violation stricte. Vous pouvez donc faire ce qui suit -
la source
Si vous essayez d'implémenter une méthode, vous voudrez peut-être l'attribuer au prototype à la place:
JSHint n'avertit pas lorsque la fonction est attribuée.
la source
ClassName.prototype.myMethod = myMethod;
, puis défini la méthode ci-dessous. Vous obtenez toujours une erreur même si myMethod est correctement lié.