According to MDN:
The propertyIsEnumerable() method returns a Boolean indicating whether the specified property is enumerable
But w
propertyIsEnumerable only checks properties on the object itself, it doesn't consider the prototype chain. So:
me.propertyIsEnumerable('info')
returns false because there is no info property on me, it's on Person.prototype. It shows up in the for loop because it will iterate over all properties of me, including those inherited from its constructor's prototype.
Because of this behaviour, propertyIsEnumerable was used as a substitute for hasOwnProperty in early versions of Safari where hasOwnProperty was either buggy or not present (I can't remember which).