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 « sans prototype intégré ».
Comment modifier mon code pour résoudre cette erreur? Je ne veux pas désactiver cette règle.
javascript
ecmascript-6
eslint
booYah
la source
la source
Object.hasOwnProperty(entries,key)
?entries
, ignorekey
et vérifie siObject
a une propriété avec cette chaîne.Réponses:
Vous pouvez y accéder via
Object.prototype
:Object.prototype.hasOwnProperty.call(obj, prop);
Cela devrait être plus sûr, car
Object.prototype
Object.prototype
, lahasOwnProperty
méthode pourrait être ombrée par autre chose.Bien sûr, le code ci-dessus suppose que
Object
n'a pas été ombragé ou redéfiniObject.prototype.hasOwnProperty
n'a pas été redéfinicall
propriété n'a été ajoutée àObject.prototype.hasOwnProperty
Function.prototype.call
n'a pas été redéfiniSi l'un de ces éléments ne tient pas, en essayant de coder de manière plus sûre, vous pourriez avoir cassé votre code!
Une autre approche qui n'a pas besoin
call
serait!!Object.getOwnPropertyDescriptor(obj, prop);
la source
Pour votre cas spécifique, les exemples suivants fonctionnent:
if(Object.prototype.hasOwnProperty.call(entries, "key")) { //rest of the code }
OU
if(Object.prototype.isPrototypeOf.call(entries, key)) { //rest of the code }
OU
if({}.propertyIsEnumerable.call(entries, "key")) { //rest of the code }
la source
Il semble que cela fonctionnerait également:
key in entries
puisque cela retournera un booléen si la clé existe ou non à l'intérieur de l'objet?
la source
hasOwnProperty
vérifie si une chaîne ou un symbole est une propriété propre.key in entries
vérifie si elle est propre ou héritée.J'espère que je ne serai pas critiqué pour cela, je le ferai probablement, mais!
var a = {b: "I'm here"} if (a["b"]) { console.log(a["b"]) } if (a["c"]) { console.log("Never going to happen") }
N'a, pour autant, jamais cassé mon code 😬 Mais je ne suis pas sûr que ce soit le cas dans tous les navigateurs web ...
(De plus, si
Canadarm
n'est pas défini, votre code semblereturn entries[key];
même si la clé n'est pas dans les entrées ...)la source
a
avez un prototypec
, cela arrivera. Js remontera la chaîne de prototypes