HasOwnProperty в javascript

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.

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

Ответ 1

hasOwnProperty - это нормальная функция Javascript, которая принимает строковый аргумент.

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

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

Ответ 2

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

Ответ 3

Попробуйте следующее:

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

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

for(i in obj) { ... }

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

 for(i in obj) {
   alert("The value of obj." + i + " = " + obj[i]);
 }

Ответ 4

Я написал компонент с открытым исходным кодом для object-hasOwnProperty.

Примеры:

hasOwnProperty({foo: 'bar'}, 'foo') // => true
hasOwnProperty({foo: 'bar'}, 'bar') // => false

Код Src:

function hasOwnProperty(obj: {}, prop: string|number): boolean {
  return Object.prototype.hasOwnProperty.call(obj, prop);
};