hasOwnProperty in JavaScript


79

Erwägen:

function Shape() {
    this.name = "Generic";
    this.draw = function() {
        return "Drawing " + this.name + " Shape";
    };
}

function welcomeMessage()
{
    var shape1 = new Shape();
    //alert(shape1.draw());
    alert(shape1.hasOwnProperty(name));  // This is returning false
}

.welcomeMessageauf der body.onloadVeranstaltung angerufen .

Ich habe erwartet shape1.hasOwnProperty(name), true zurückzugeben, aber es wird false zurückgegeben.

Was ist das richtige Verhalten?


5
es erfordert eine Zeichenfolge, "name"im Gegensatz zuname
AO_

Antworten:


157

hasOwnProperty ist eine normale JavaScript-Funktion, die ein Zeichenfolgenargument akzeptiert.

Wenn Sie aufrufen, übergeben shape1.hasOwnProperty(name)Sie ihm den Wert der nameVariablen (die nicht existiert), genau wie beim Schreiben alert(name).

Sie müssen hasOwnPropertymit einer Zeichenfolge aufrufen, die Folgendes enthält name: shape1.hasOwnProperty("name").


1
Vergessen Sie nicht, hasOwnProperty () hinzuzufügen. Gibt einen booleschen Wert zurück, der angibt,
ob die

18

hasOwnProperty erwartet den Eigenschaftsnamen als Zeichenfolge, so wäre es shape1.hasOwnProperty("name")


3

Versuche dies:

Funktion welcomeMessage ()
{
    var shape1 = neue Form ();
    // alert (shape1.draw ());
    alert (shape1.hasOwnProperty ("name"));
}}

Bei der Arbeit mit Reflektion in JavaScript werden Mitgliedsobjekte immer als Name als Zeichenfolge bezeichnet. Zum Beispiel:

for(i in obj) { ... }

Der Schleifeniterator i enthält einen Zeichenfolgenwert mit dem Namen der Eigenschaft. Um dies im Code zu verwenden, müssen Sie die Eigenschaft mit dem Array-Operator wie folgt adressieren:

 für (i in obj) {
   alert ("Der Wert von obj." + i + "=" + obj [i]);
 }}

2

hasOwnProperty () ist eine nette Eigenschaft zum Überprüfen von Objektschlüsseln. Beispiel:

var obj = {a:1, b:2};

obj.hasOwnProperty('a') // true

Zu "nice property" : Ist es nicht eine Funktion?
Peter Mortensen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.