Я думаю, что это может быть дубликат строгого нарушения с использованием этого ключевого слова и раскрытием шаблона модуля
У меня есть такой код:
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()
экземпляра и последующее обращение к нему как-то неуместным?
Считается ли это плохим стилем?
javascript
jslint
strict
jshint
Чизо
источник
источник
this
. Я понятия не имею, почему JSLint назвал бы это строгим нарушением, но я знаю, что если вы не определитеthis
значение функции, она будетundefined
в строгом режиме. Ясно, что вы определяетеthis
, так что это не должно быть проблемой."-W040":true
в конфигурации json, но поскольку json не имеет комментариев, вы не можете никому сказать, почему он там.Ответы:
JSHint говорит: «Возможное строгое нарушение», потому что вы используете
this
внутри что-то, что, насколько он может судить, не является методом.В нестрогом режиме вызов
gotoPage(5)
будет привязанthis
к глобальному объекту (window
в браузере). В строгом режимеthis
были быundefined
, и у вас были бы проблемы.Предположительно, вы хотите вызвать эту функцию с привязанным
this
контекстом, например,gotoPage.bind(myObj)(5)
илиgotoPage.call(myObj, 5)
. В этом случае вы можете игнорировать JSHint, так как вы не создадите никаких ошибок. Но он говорит вам, что ваш код непонятен всем, кто его читает, потому что использованиеthis
внутри чего-то, что не является очевидным методом, довольно запутанно. Лучше просто передать объект в качестве параметра:источник
this
это в конечном итогеundefined
, то фактическая проблема не только строгий режим нарушения. Им лучше было бы дать предупреждение, сказав, что этоthis
может бытьundefined
в "строгом режиме", что приведет кTypeError
(или чему-то).event.currentTarget
вместоthis
..jshintrc
чтобы отключить эту проверку?/* jshint validthis: true */
если у вас всего пара и вы не хотите менять в каждом случае.У меня было это сообщение для функции, которая не начиналась с заглавной буквы.
источник
Something
это конструктор из-за заглавной буквы S, и поэтому его следует вызывать с помощьюnew
. Это определяетthis
новый объект, основанный на Something.prototype. Скорее всего, это связано с тем, что это не вызывает предупреждения о возможном строгом нарушении.Если вы объявляете функцию как переменную вместо использования стандартного объявления функции, jshint не будет отмечать это как строгое нарушение. Итак, вы можете сделать следующее -
источник
Если вы пытаетесь реализовать метод, вы можете вместо этого назначить прототипу:
JSHint не будет предупреждать, когда функция назначается.
источник
ClassName.prototype.myMethod = myMethod;
, а затем определил метод ниже. Вы по-прежнему получаете сообщение об ошибке, даже если myMethod привязан правильно.