web-dev-qa-db-fra.com

Le prototype de tableau est en lecture seule, les propriétés ne doivent pas être ajoutées no-extend-native

Donc, fondamentalement, j'ai ce code:

Array.prototype.inState = function (needle, haystack) {
  let index = this.findIndex(value => value[needle] === haystack);

  return index === -1;
};

et cela fonctionne assez bien pour vérifier si l'aiguille donnée existe ou non à l'état réactif. mais ESlint n'arrête pas de dire que:

Array prototype is read only, properties should not be added  no-extend-native

donc ma question est: Quel est le problème avec mon code?

6
AH.Pooladvand

Depuis EsLint Docs:

En JavaScript, vous pouvez étendre n'importe quel objet, y compris les objets intégrés ou "natifs". Parfois, les gens modifient le comportement de ces objets natifs de manière à briser les hypothèses formulées à leur sujet dans d'autres parties du code.

Par exemple, ici, nous remplaçons une méthode intégrée qui affectera alors tous les objets, même les autres intégrés.

// 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"
}

En bref, Array.prototype.inState étendra le array.prototype et donc chaque fois que vous souhaitez utiliser un tableau, la fonction instate sera également ajoutée à ce tableau.

Donc, dans votre cas, cet exemple sera appliqué au tableau.

Array.prototype.inState = function (needle, haystack) {
  let index = this.findIndex(value => value[needle] === haystack);

  return index === -1;
};


// loop through some userIds
var users = [{"123": "Stan"},{"456": "David"}];

// not what you'd expect
for (var id in users) {
    console.log(users[id]); // "123", "456", "extra"
}

Contournement


Vous pouvez ajouter cette ligne pour ignorer l'avertissement.

/*eslint no-extend-native: ["error", { "exceptions": ["Object"] }]*/ to ignore that warning.

Réf: https://eslint.org/docs/rules/no-extend-native

5
Just code

C'est parce qu'esLint obtient sa mutation vers la chaîne native des protoTypes. Vous pouvez ajouter // eslint-disable-next-line no-extend-native au-dessus de la ligne ça devrait aller.

1
Ashif Zafar