Spec-Zone.ru › ESLint

prefer-spread

Требовать использовать операторы spread вместо .apply()

❄️ Заморожено

В настоящее время это правило заморожено, и запросы на добавление функций не принимаются.

До ES2015 для вызова функций с переменным числом аргументов необходимо использовать Function.prototype.apply().

const args = [1, 2, 3, 4];
Math.max.apply(Math, args);

В ES2015 для вызова функций с переменным числом аргументов можно использовать синтаксис spread.

const args = [1, 2, 3, 4];
Math.max(...args);

Подробное описание правила

Это правило предназначено для обнаружения использования Function.prototype.apply() в ситуациях, когда вместо него можно использовать синтаксис spread.

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

Открыть в Playground
/*eslint prefer-spread: "error"*/

foo.apply(undefined, args);
foo.apply(null, args);
obj.foo.apply(obj, args);

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

Открыть в Playground
/*eslint prefer-spread: "error"*/

// Using spread syntax
foo(...args);
obj.foo(...args);

// The `this` binding is different.
foo.apply(obj, args);
obj.foo.apply(null, args);
obj.foo.apply(otherObj, args);

// The argument list is not variadic.
// Those are warned by the `no-useless-call` rule.
foo.apply(undefined, [1, 2, 3]);
foo.apply(null, [1, 2, 3]);
obj.foo.apply(obj, [1, 2, 3]);

Параметры

У этого правила нет параметров.

Известные ограничения

Это правило анализирует код статически, чтобы проверить, изменяется ли аргумент this. Поэтому, если аргумент this вычисляется в динамическом выражении, правило не сможет обнаружить нарушение.

/*eslint prefer-spread: "error"*/

// This warns.
a[i++].foo.apply(a[i++], args);

// This does not warn.
a[++i].foo.apply(a[i], args);

Когда не следует использовать это правило

Это правило не следует использовать в средах ES3/5.

В ES2015 (ES6) или более поздних версиях, если вы не хотите получать уведомления о вызовах Function.prototype.apply(), это правило можно безопасно отключить.

Связанные правила

  • no-useless-call

Версия

Это правило появилось в ESLint v1.0.0-rc-1.

Ресурсы

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

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

Spec-Zone.ru

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