no-extra-bind
Запрещает ненужные вызовы .bind()
Некоторые проблемы, о которых сообщает это правило, можно исправить автоматически с помощью параметра командной строки --fix
Метод bind() используется для создания функций с определёнными значениями this и, при необходимости, привязки аргументов к определённым значениям. Если он используется для задания значения this, важно, чтобы функция действительно использовала this в своём теле. Например:
const boundGetName = (function getName() {
return this.name;
}).bind({ name: "ESLint" });
console.log(boundGetName()); // "ESLint"
Этот код показывает корректное использование bind() для задания значения this.
Иногда в процессе сопровождения кода значение this удаляют из тела функции. В этом случае может остаться вызов bind(), который ничего не делает:
// useless bind
const 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"*/
const x = function () {
foo();
}.(bar);
const y = (() => {
foo();
}).(bar);
const z = (() => {
this.foo();
}).(bar);
const a = function () {
(function () {
this.foo();
}());
}.(bar);
const b = function () {
function foo() {
this.bar();
}
}.(baz);
Примеры правильного кода для этого правила:
/*eslint no-extra-bind: "error"*/
const x = function () {
this.foo();
}.bind(bar);
const y = 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