В
function Foo() {
this.prop1 = 1;
this.prop2 = 2;
}
let foo = new Foo();
foo.prop1 // принадлежит самому объекту
foo.hasOwnProperty // не принадлежит объекту foo, поиск продолжится в прототипе foo.__proto__.__proto__
// так как сам foo.__proto__ пуст, там есть только свойство constructor, свойство будет искаться в прототипе прототипа, а это прототип обычного объекта и там есть hasOwnProperty