Spec-Zone.ru › ESLint

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() со стрелочными функциями.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-extra-bind: "error"*/

const x = function () {
    foo();
}.bind(bar);

const y = (() => {
    foo();
}).bind(bar);

const z = (() => {
    this.foo();
}).bind(bar);

const a = function () {
    (function () {
      this.foo();
    }());
}.bind(bar);

const b = function () {
    function foo() {
      this.bar();
    }
}.bind(baz);

Примеры правильного кода для этого правила:

Открыть в Playground
/*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.

Дополнительная литература

Function.prototype.bind() — JavaScript | MDN
developer.mozilla.org
Понимание JavaScript Bind() — Smashing Magazine
www.smashingmagazine.com

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-extra-bind

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API