// Poisoning Object.prototype Object.prototype.bar = 1; var foo = {goo: undefined}; foo.bar; // 1 'bar' in foo; // true foo.hasOwnProperty('bar'); // false foo.hasOwnProperty('goo'); // true
Hier kann nur hasOwnProperty die richtige Antwort geben, was beim Durchlaufen der Eigenschaften eines Objekts sehr wichtig ist. In Javascript gibt es keine andere Möglichkeit festzustellen, ob eine Eigenschaft für das Objekt selbst definiert ist oder von der Prototypenkette geerbt wird.
hasOwnProperty als Eigenschaft
Javascript macht hasOwnProperty nicht zu einem sensiblen Wort, was bedeutet, dass Sie eine Eigenschaft mit dem Namen hasOwnProperty haben können. Derzeit können Sie Ihre eigene hasOwnProperty-Methode nicht mehr zum Beurteilen von Eigenschaften verwenden. Sie müssen daher die externe hasOwnProperty-Methode zum Beurteilen verwenden.
var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // always returns false // Use another Object's hasOwnProperty and call it with 'this' set to foo ({}).hasOwnProperty.call(foo, 'bar'); // true // It's also possible to use hasOwnProperty from the Object // prototype for this purpose Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
Zusammenfassung
Bei der Bestimmung der Existenz von Objekteigenschaften ist hasOwnProperty die einzige Methode, auf die man sich verlassen kann. Ich möchte Sie auch daran erinnern, dass bei der Verwendung einer for-in-Schleife zum Durchlaufen von Objekten durch die Verwendung von hasOwnProperty die durch die Erweiterung von Prototypobjekten verursachten Probleme effektiv vermieden werden.