ESLint で「Do not access Object.prototype method 'hasOwnProperty' from target object」というエラーが出る場合の対処法です。
ESLint( v8.51.0 )を走らせた時、下記のようなエラーが出ました。
Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins
no-prototype-builtins - ESLint - Pluggable JavaScript Linter
これは、オブジェクトが Object.prototype
を継承していない場合や、hasOwnProperty
が上書きされている場合は意図せぬ動きになるため、hasOwnProperty
を直接実行しないことが推奨されるようになったからのようです。
例えば、以下のようにしてオブジェクトを作ると Object.prototype
が継承されません。
const obj = Object.create(null);
console.log(obj.hasOwnProperty); // => undefined となる
例えば、以下のようにしてオブジェクトを作ると hasOwnProperty
が本来の動きとは違うものになります。
const obj = {
hasOwnProperty: function(prop) {
alert(prop);
}
};
console.log(obj.hasOwnProperty('property'));
これを実行するとアラートがでます。
ということで、上の ESLint のドキュメンントにも書いてありますが、以下のように書き換えればOKです。
// Before
foo.hasOwnProperty("bar")
// After
Object.prototype.hasOwnProperty.call(foo, "bar")