hasOwnProperty w JavaScript

79

Rozważać:

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
}

.welcomeMessagewezwany na body.onloadwydarzenie.

Spodziewałem shape1.hasOwnProperty(name)się, że zwrócę prawdę, ale zwraca fałsz.

Jakie jest prawidłowe zachowanie?

Thiyaneshwaran S
źródło
5
wymaga łańcucha, więc "name"w przeciwieństwie doname
AO_

Odpowiedzi:

157

hasOwnProperty jest zwykłą funkcją JavaScript, która przyjmuje argument w postaci łańcucha.

Kiedy wywołujesz shape1.hasOwnProperty(name), przekazujesz jej wartość namezmiennej (która nie istnieje), tak jakbyś to napisał alert(name).

Trzeba zadzwonić hasOwnPropertyz ciągiem zawierającym namecoś takiego: shape1.hasOwnProperty("name").

SLaks
źródło
1
Nie zapomnij dodać funkcji hasOwnProperty () zwraca wartość logiczną wskazującą, że właściwość (w tym przypadku nazwa) istnieje lub nie istnieje
maheshmnj
18

hasOwnProperty oczekuje nazwy właściwości jako łańcucha, więc tak będzie shape1.hasOwnProperty("name")

Pablo Cabrera
źródło
3

Spróbuj tego:

function welcomeMessage ()
{
    var shape1 = new Shape ();
    // alert (shape1.draw ());
    alert (shape1.hasOwnProperty ("name"));
}

Podczas pracy z odbiciem w JavaScript obiekty składowe są zawsze określane jako nazwa jako ciąg. Na przykład:

for(i in obj) { ... }

Iterator pętli i będzie zawierał wartość ciągu z nazwą właściwości. Aby użyć tego w kodzie, musisz zaadresować właściwość za pomocą operatora tablicy w następujący sposób:

 for (i in obj) {
   alert ("Wartość obj." + i + "=" + obj [i]);
 }
Ernelli
źródło
2

hasOwnProperty () to przyjemna właściwość do sprawdzania poprawności kluczy obiektów. Przykład:

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

obj.hasOwnProperty('a') // true
KARTHIKEYAN.A
źródło
W odniesieniu do „ładnej własności” : Czy nie jest to funkcja?
Peter Mortensen