При проверке типов переменных, чтобы предотвратить сбой приложения, я всегда использую
var hasBarProperty = foo.hasOwnProperty("bar");
Однако недавно я добавил новый пакет линтинга, и он выдает ошибку в этой строке, говоря, что следующая строка лучше
var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");
Когда я нажимаю на ошибку, отображается это объяснение, которое я не полностью понимаю,
Так чем же второй лучше первого?
Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Правило говорит вам использовать
var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");
скорее, чем
var hasBarProperty = foo.hasOwnProperty("bar");
потому что, если foo имеет отвергнутыйhasOwnProperty, последний может быть ненадежным:
var foo = {
hasOwnProperty: function() {
return true;
}
};
console.info(Object.prototype.hasOwnProperty.call(foo, "bar")); // false
console.info(foo.hasOwnProperty("bar")); // true