我使用下面的逻辑来获取给定键的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。我得到以下错误:
不要访问Object。原型方法'hasOwnProperty'从目标对象。
这是一个“no-prototype-builtins”错误。
如何更改代码来解决此错误?我不想禁用这个规则。
你可以通过Object.prototype访问它:
Object.prototype.hasOwnProperty.call(obj, prop);
这样更安全,因为
并非所有对象都继承自Object.prototype
即使是继承自Object的对象。在原型中,hasOwnProperty方法可以被其他方法遮蔽。
当然,上面的代码是这样假设的
全局对象没有被遮蔽或重新定义
原生Object.prototype.hasOwnProperty没有被重新定义
Object.prototype.hasOwnProperty中没有添加call own属性
原生Function.prototype.call没有被重新定义
如果这些都不成立,试图以更安全的方式编码,您可能已经破坏了您的代码!
另一种不需要调用的方法是
!!Object.getOwnPropertyDescriptor(obj, prop);
你可以通过Object.prototype访问它:
Object.prototype.hasOwnProperty.call(obj, prop);
这样更安全,因为
并非所有对象都继承自Object.prototype
即使是继承自Object的对象。在原型中,hasOwnProperty方法可以被其他方法遮蔽。
当然,上面的代码是这样假设的
全局对象没有被遮蔽或重新定义
原生Object.prototype.hasOwnProperty没有被重新定义
Object.prototype.hasOwnProperty中没有添加call own属性
原生Function.prototype.call没有被重新定义
如果这些都不成立,试图以更安全的方式编码,您可能已经破坏了您的代码!
另一种不需要调用的方法是
!!Object.getOwnPropertyDescriptor(obj, prop);