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);
};