Do not access Object.prototype method'hasOwnProperty'問題の原因と解決方法

2344 ワード

ESLintエラーの修正方法:ターゲットオブジェクトのプロトタイプなし内蔵オブジェクトからObject.prototypeメソッド'hasOwnProperty'にアクセスしないでください.
Vue.jsを使用して新しいプロジェクトを開始すると、ESLintとともに使用するように構成されたテンプレートが自動的に生成されます.ESLintは、JavaScriptの不良パターンの識別とレポートを容易にするために、プラグインおよび構成可能なLinterツールです.したがって、コードの品質を簡単に維持できます.制御なしにプログラミングを開始すると、ESLintに不利な方法が導入される可能性があります.たとえば、オブジェクトに特定のプロパティがあるかどうかを確認するなど、最も簡単なことの1つです.
let events = {"some-index": false};
let key = "some-index";
if(events.hasOwnProperty(key)){
    // Do Something ...
    console.log("The object has the property");
}

このno-prototype-builtinsのルールにより、アプリケーションの構築を試みると、例外がトリガーされます.ECMAScript 5.1では、指定された[[PRODetype]]を持つオブジェクトを作成できるObject.createが追加されています.Object.create(null)は、Mapとして使用するオブジェクトを作成するための一般的なモードです.オブジェクトがfromのプロパティを持つと仮定すると、エラーObject.prototypeになる可能性があります.この規則no-prototype-builtinsは、Object.prototypeが直接オブジェクトからメソッドを呼び出すことを防止する.No-prototype-ビルディングの詳細については、ESLintの公式ドキュメントにアクセスしてください.
この文書では、アプリケーションの構築を試みるときにこのエラーが発生しないように、異なる方法を共有します.
ソリューション
このエラーを回避するには、ObjectのプロトタイプからhasOwnPropertyMethodに簡単にアクセスし、callを使用して関数を実行する方法がいくつかあります.
let events = {"some-index": false};
let key = "some-index";
if(Object.prototype.hasOwnProperty.call(events, key)) {
    // This would compile without any issue !
    console.log("The object has the property");
}

属性を列挙できないチェック・オブジェクトの等価な方法がない限り、次のようになります.
let events = {"some-index": false};
let key = "some-index";
if({}.propertyIsEnumerable.call(events, key)) {
    // This would compile without any issue !
    console.log("The object has the property");
}

またはgetOwnPropertyDescriptorの方法によって:
let events = {"some-index": false};
let key = "some-index";
if(!!Object.getOwnPropertyDescriptor(events, key)) {
    // This would compile without any issue !
    console.log("The object has the property");
}

コードが楽しい❤️!