我正在使用以下逻辑来获取给定键的 i18n 字符串。
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];
}
我在我的项目中使用 ESLint。我收到以下错误:
Do not access Object.prototype method 'hasOwnProperty' from target object. It is a 'no-prototype-builtins' error.
如何更改我的代码以解决此错误?我不想禁用此规则。
最佳答案
您可以通过 Object.prototype
访问它:
Object.prototype.hasOwnProperty.call(obj, prop);
那应该更安全,因为
- 并非所有对象都继承自
Object.prototype
- 即使是从
Object.prototype
继承的对象,hasOwnProperty
方法也可能被其他东西覆盖。
当然,上面的代码假设
- 全局
对象
没有被遮蔽或重新定义 - 原生
Object.prototype.hasOwnProperty
没有被重新定义 - 没有
调用
自己的属性被添加到Object.prototype.hasOwnProperty
- 原生
Function.prototype.call
没有被重新定义
如果其中任何一个不成立,尝试以更安全的方式编码,您可能已经破坏了您的代码!
另一种不需要调用
的方法是
!!Object.getOwnPropertyDescriptor(obj, prop);
关于javascript - Object.hasOwnProperty() 产生 ESLint 'no-prototype-builtins' 错误 : how to fix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282873/