hasOwnProperty в JavaScript

79

Рассматривать:

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
}

.welcomeMessageпризвал на body.onloadмероприятие.

Я ожидал shape1.hasOwnProperty(name)вернуть true, но он возвращает false.

Какое правильное поведение?

Тиянешваран С
источник
5
для этого требуется строка, поэтому "name"в отличие отname
AO_
Возможный дубликат javascript что такое свойство в hasOwnProperty?
pathe.kiran

Ответы:

157

hasOwnProperty - обычная функция JavaScript, которая принимает строковый аргумент.

Когда вы вызываете, shape1.hasOwnProperty(name)вы передаете ему значение nameпеременной (которой не существует), как если бы вы написали alert(name).

Вам нужно позвонить hasOwnPropertyсо строкой , содержащей name, например: shape1.hasOwnProperty("name").

SLaks
источник
1
Не забудьте добавить, что hasOwnProperty () возвращает логическое значение, указывающее, что указанное свойство (в данном случае имя) существует или нет
maheshmnj 03
18

hasOwnProperty ожидает имя свойства в виде строки, поэтому оно будет shape1.hasOwnProperty("name")

Пабло Кабрера
источник
3

Попробуй это:

функция welcomeMessage ()
{
    var shape1 = новая форма ();
    // предупреждение (shape1.draw ());
    alert (shape1.hasOwnProperty ("имя"));
}

При работе с отражением в JavaScript на объекты-члены всегда ссылаются как на имя в виде строки. Например:

for(i in obj) { ... }

Итератор цикла i будет содержать строковое значение с именем свойства. Чтобы использовать это в коде, вы должны обратиться к свойству с помощью оператора массива следующим образом:

 for (i in obj) {
   alert ("Значение obj." + i + "=" + obj [i]);
 }
Эрнелли
источник
2

hasOwnProperty () - хорошее свойство для проверки ключей объекта. Пример:

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

obj.hasOwnProperty('a') // true
КАРТИКЕЯН А.
источник
Re "хорошее свойство" : разве это не функция?
Питер Мортенсен