指定されたキーの 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.prototype メソッド 'hasOwnProperty' にアクセスしないでください。これは ' no-prototype-builtins ' エラーです。
このエラーを解決するには、コードをどのように変更すればよいですか? このルールを無効にしたくありません。
ベストアンサー1
以下の方法でアクセスできますObject.prototype
:
Object.prototype.hasOwnProperty.call(obj, prop);
それはより安全なはずです。
- すべてのオブジェクトが継承するわけではない
Object.prototype
- から継承するオブジェクトの場合でも
Object.prototype
、hasOwnProperty
メソッドが他のものによって隠される可能性があります。
もちろん、上記のコードは、
- グローバルは
Object
シャドウ化または再定義されていない - ネイティブは
Object.prototype.hasOwnProperty
再定義されていない call
所有物件は追加されていませんObject.prototype.hasOwnProperty
- ネイティブは
Function.prototype.call
再定義されていない
これらのいずれかが当てはまらない場合、より安全な方法でコーディングしようとすると、コードが壊れてしまう可能性があります。
必要のないもう一つのアプローチcall
は
!!Object.getOwnPropertyDescriptor(obj, prop);