no-extra-bind
Запретить лишние вызовы .bind()
Некоторые проблемы, выявленные этим правилом, автоматически исправляются с помощью параметра --fix командной строки
Метод bind() используется для создания функций со специфическими значениями this и, необязательно, связывания аргументов со специфическими значениями. При использовании для задания значения this, важно, чтобы функция фактически использовала this в своём теле функции. Например:
var boundGetName = (function getName() {
return this.name;
}).bind({ name: "ESLint" });
console.log(boundGetName()); // "ESLint"
Этот код — пример правильного использования bind() для задания значения this
Иногда во время сопровождения кода значение this удаляется из тела функции. В таком случае вы можете получить вызов bind(), который ничего не делает:
// useless bind
var boundGetName = (function getName() {
return "ESLint";
}).bind({ name: "ESLint" });
console.log(boundGetName()); // "ESLint"
В этом коде ссылка на this была удалена, но bind() всё ещё используется. В таком случае вызов bind() представляет собой излишнюю нагрузку (и потерю производительности), и его можно безопасно удалить.
Подробное описание правила
Это правило призвано избегать лишнего использования bind() и, таким образом, будет выводить предупреждение всякий раз, когда немедленно вызываемое выражение функции (IIFE) использует bind() и не имеет соответствующего значения this. Это правило не будет выводить предупреждение для использования bind(), включающего привязку аргументов функции.
Примечание: Значение this стрелочных функций никогда нельзя установить, используя bind(). Это правило отмечает все случаи использования bind() со стрелочными функциями как проблему.
Примеры некорректного кода для этого правила:
/*eslint no-extra-bind: "error"*/
var x = function () {
foo();
}.(bar);
var x = (() => {
foo();
}).(bar);
var x = (() => {
this.foo();
}).(bar);
var x = function () {
(function () {
this.foo();
}());
}.(bar);
var x = function () {
function foo() {
this.bar();
}
}.(baz);
Примеры корректного кода для этого правила:
/*eslint no-extra-bind: "error"*/
var x = function () {
this.foo();
}.bind(bar);
var x = function (a) {
return a + 1;
}.bind(foo, bar);
Когда не стоит его использовать
Если вы не беспокоитесь о лишних вызовах bind(), вы можете безопасно отключить это правило.
Версия
Это правило было добавлено в ESLint v0.8.0.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-extra-bind