2016-04-15 8 views
1
benutzerdefinierten Methoden auf Object.prototype in Javascript Hinzufügen

Ich füge eine benutzerdefinierte add() Methode zum Master Object.prototype, so dass alle generischen Objekte der Lage sein werden, diese add() MethodeSeite beeinflusst von

Object.prototype.add = function(value1, value2) { 
return value1 + value2; 
}; 

Frage 1 zugreifen : Wie überprüft man, ob diese add() Methode aufzählbar ist?

Ich erstelle ein generisches Objekt

var obj = { 

} 

Ich verwende for-in Schleife alle Eigenschaften drucken (dies sollte sowohl eigene Eigenschaften und Prototyp Eigenschaften drucken)

for (prop in obj){ 

    console.log("property is :" + prop); 
} 

Diese gedruckte //property is :add

Frage 2: Schreibt for-in Schleife sowohl aufzählbare als auch nicht aufzählbare Eigenschaften?

Lets Object.keys verwenden, die eine Reihe von Eigenschaften zurückgibt (nur wenn zählbare)

var propKeys = Object.keys(obj); 
console.log(propKeys); //prints an empty array [] 

Frage 3: Warum Object.keys nicht den Druck der add Eigenschaft?

Antwort

1

Um Frage 2 zu beantworten, iteriert eine for-in Schleife eine Eigenschaft genau dann, wenn sie aufzählbar ist, also keine nicht aufzählbaren Eigenschaften.

Zur Frage 1 zu beantworten, um zu überprüfen, ob eine Eigenschaft enumerable ist, die Sie tatsächlich ein for-in Schleife, so etwas wie verwenden:

function isEnumerable(object, property) { 
    for (prop in object) { 
     if (prop === property) { 
      return true; 
     } 
    } 
    return false; 
} 

Die Tatsache, dass Ihre for-in Schleife druckt „add“ bedeutet, dass es ist aufzählbar. Und tatsächlich sind alle Eigenschaften, die Sie in Ihrem eigenen Code definieren, standardmäßig aufzählbar.

Um Frage 3 zu beantworten, gibt Object.keys() Ihnen Eigenschaften nur dann, wenn sie beide aufzählbar sind und eigene Eigenschaften besitzen. Da .add vererbt wird, wird es nicht mit Object.keys() angezeigt.

Hoffe, das hilft!

Verwandte Themen