no-extend-native
Запрет расширения встроенных типов
В JavaScript вы можете расширять любые объекты, включая встроенные или «нативные» объекты. Иногда люди изменяют поведение этих нативных объектов способами, которые нарушают предположения, сделанные о них в других частях кода.
Например, здесь мы перезаписываем встроенный метод, который затем повлияет на все объекты, даже на другие встроенные.
// seems harmless
Object.prototype.extra = 55;
// loop through some userIds
var users = {
"123": "Stan",
"456": "David"
};
// not what you'd expect
for (var id in users) {
console.log(id); // "123", "456", "extra"
}
Общее предложение для решения этой проблемы — обернуть внутреннюю часть for цикла с помощью users.hasOwnProperty(id). Однако, если это правило строго соблюдается во всем вашем кодовом основании, вам не нужно будет делать этот шаг.
Подробности правила
Запрещает прямое изменение прототипа встроенных объектов.
Примеры неправильного кода для этого правила:
/*eslint no-extend-native: "error"*/
;
;
Параметры
Это правило принимает параметр exceptions, который можно использовать для указания списка встроенных объектов, для которых разрешены расширения.
Исключения
Примеры правильного кода для примера { "exceptions": ["Object"] } параметра:
/*eslint no-extend-native: ["error", { "exceptions": ["Object"] }]*/
Object.prototype.a = "a";
Известные ограничения
Это правило не сообщает о следующих менее очевидных подходах к модификации прототипа встроенных объектов:
var x = Object;
x.prototype.thing = a;
eval("Array.prototype.forEach = 'muhahaha'");
with(Array) {
prototype.thing = 'thing';
};
window.Function.prototype.bind = 'tight';
Когда его не следует использовать
Вы можете отключить это правило при работе с полифилами, которые пытаются обновить более старые версии JavaScript с использованием последнего стандарта, например, те, которые могут Function.prototype.bind или Array.prototype.forEach в дружественном к будущему стиле.
Связанные правила
Версия
Это правило было введено в ESLint v0.1.4.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-extend-native