J'utilise la logique suivante pour obtenir la chaîne i18n 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];
}
J'utilise ESLint dans mon projet. Je reçois l'erreur suivante:
N'accédez pas à la méthode Object.prototype 'hasOwnProperty' à partir de l'objet cible . C'est une erreur ' no-prototype-builtins '.
Comment changer mon code pour résoudre cette erreur? Je ne veux pas désactiver cette règle.
Vous pouvez y accéder via Object.prototype
:
Object.prototype.hasOwnProperty.call(obj, prop);
Cela devrait être plus sûr, parce que
Object.prototype
Object.prototype
, la méthode hasOwnProperty
peut être ombrée par autre chose.Bien sûr, le code ci-dessus suppose que
Object
n'a pas été ombragée ni redéfinieObject.prototype.hasOwnProperty
natif n'a pas été redéfinicall
n'a été ajoutée à Object.prototype.hasOwnProperty
Function.prototype.call
natif n'a pas été redéfiniSi l'un de ces problèmes ne tient pas, si vous essayez de coder de manière plus sécurisée, vous pourriez avoir cassé votre code!
Une autre approche qui n’a pas besoin de call
serait
!!Object.getOwnPropertyDescriptor(obj, prop);
Il semble que cela fonctionnerait aussi:
key in entries
puisque cela retournera un booléen sur si la clé existe ou non à l'intérieur de l'objet?
Pour votre cas spécifique, les exemples suivants doivent fonctionner:
if(Object.prototype.hasOwnProperty.call(entries, "key")) {
//rest of the code
}
OR
if(Object.prototype.isPrototypeOf.call(entries, key)) {
//rest of the code
}
OR
if({}.propertyIsEnumerable.call(entries, "key")) {
//rest of the code
}