Comment puis-je accéder à l'Objet.prototype de la méthode dans la suite logique?
Je suis en utilisant la logique suivante pour obtenir l'i18n chaîne de la clé donnée.
export function i18n(key) {
if (entries.hasOwnProperty(key)) {
return entries[key];
} else if (typeof (Canadarm) !== 'undefined') {
try {
throw Error();
} catch (e) {
Canadarm.error(entries['dataBuildI18nString'] + key, e);
}
}
return entries[key];
}
Je suis en utilisant ESLint dans mon projet. J'obtiens l'erreur suivante:
De ne pas accéder à l'Objet.prototype de la méthode 'hasOwnProperty' partir de l'objet cible.
C'est un " pas-prototype-les builtins' erreur.
Comment puis-je modifier mon code pour résoudre cette erreur ? Je ne veux pas désactiver cette règle.
- Vous devriez lire la documentation. Il y a des exemples de code correct ~ eslint.org/docs/rules/no-prototype-builtins
- Vous suggérons d'utiliser
Object.hasOwnProperty(entries,key)
? - Je vais voter pour fermer cette question hors-sujet, car il est répondu dans la documentation (tl:dr ~ RTFM)
- Le code fonctionne bien. C'est un peluchage erreur. Je veux juste modifier la syntaxe de sorte que le peluchage la règle est satisfaite.
- Qui stringify
entries
, ignorerkey
, et de vérifier siObject
a une propriété avec cette chaîne.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez y accéder via
Object.prototype
:Qui devrait être plus sûr, parce que
Object.prototype
Object.prototype
, lehasOwnProperty
méthode pourrait être assombri par quelque chose d'autre.Bien sûr, le code ci-dessus suppose que
Object
n'a pas fait de l'ombre ou redéfiniObject.prototype.hasOwnProperty
n'a pas été redéfinicall
la propriété a été ajoutée àObject.prototype.hasOwnProperty
Function.prototype.call
n'a pas été redéfiniSi l'un de ces ne tient pas, de tenter de code dans un moyen plus sûr, vous pourriez avoir cassé votre code!
Une autre approche qui n'a pas besoin de
call
seraitIl semble que ce serait également le travail:
key in entries
depuis qui retourne un booléen si la clé existe à l'intérieur de l'objet?
hasOwnProperty
vérifie si une chaîne de caractères ou un symbole est une propriété propre.key in entries
vérifie s'il est propre ou hérité d'un.Pour votre cas particulier, les exemples suivants sont des travaux:
OU
OU
J'espère que je ne vais pas m'downvoted pour cela, probablement, mais !
A, dans la mesure où, jamais cassé mon code Mais je ne suis pas sûr si c'est le cas dans tous les navigateurs web...
(Aussi, si
Canadarm
est pas défini, votre code semblereturn entries[key];
même si la clé n'est pas dans les entrées...)