Ответ 1
player.health
- это функция. Чтобы вызвать функцию, вы должны положить ()
после нее:
alert(player.health());
Я делаю хромую текстовую игру, и я создал объект-плеер так:
var player = {
displayText: "<span>you</span>",
currentPosition: 0,
level: 1,
health: function() { return 10 + (this.level * 15) },
strength: function() { return this.level * 5 },
hitRating: 4
}
Я понимаю, что вы можете дать объекту функцию как свойство.
Однако, когда я alert(player.health)
, я получаю:
function() { return 10 + (this.level * 15) }
Что я делаю неправильно? Вы не можете объявить свойство объекта таким образом? Есть ли способ автоматически генерировать значение player.health
в любое время после его вызова?
player.health
- это функция. Чтобы вызвать функцию, вы должны положить ()
после нее:
alert(player.health());
Если вы хотите создать свойство с помощью accessor на объекте JS, правильный способ сделать это - использовать Object.defineProperty
.
В вашем случае:
// original object
var player = {
displayText: "<span>you</span>",
currentPosition: 0,
level: 1,
// health: function() { return 10 + (this.level * 15) },
strength: function() { return this.level * 5 },
hitRating: 4
}
// create property with accessor method
Object.defineProperty(player, "health", {
get: function () {
return 10 + (player.level * 15)
}
})
// call the property
alert(player.health); // 25
player.level++;
alert(player.health); // 40
Вам нужно вызвать функцию, player.health()