Почему JSHINT жалуется, что это строгое нарушение?
Я думаю, что это может быть дубликат строгого нарушения с использованием этого ключевого слова и выявления шаблона модуля
у меня есть этот код:
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);
}
и JSHINT (JSLINT) жалуется. Там написано " строгое нарушение."для выделенной строки:
мне Function.call()
а потом ссылаться на экземпляр, как-то неуместно?
это считается плохим стилем?
4 ответа:
JSHint говорит "возможное строгое нарушение", потому что вы используете
this
внутри чего-то, что, насколько он может сказать, не является методом.в нестрогом режиме, называя
gotoPage(5)
связалthis
к глобальному объекту (window
в браузере). В строгом режиме,this
будетundefined
, и вы попадете в беду.предположительно, вы хотите вызвать эту функцию с привязкой
this
контексте, например,gotoPage.bind(myObj)(5)
илиgotoPage.call(myObj, 5)
. Если это так, вы можете игнорировать JSHint, как вы не будете генерировать никаких ошибок. Но, это говорит вам, что ваш код непонятен никому, читая его, потому что с помощьюthis
внутри чего-то, что явно не является методом, довольно запутанно. Было бы лучше просто передать объект в качестве параметра: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); }
У меня было это сообщение для функции, которая не начиналась с заглавной буквы.
"use strict"; // ---> strict violation function something() { this.test = ""; } // ---> just fine (note the capital S in Something) function Something() { this.test = ""; }
Если вы объявите функцию как переменную вместо использования стандартного объявления функции, jshint не будет отмечать это как строгое нарушение. Так что вы можете сделать следующее -
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); };