Объявление свойства объекта javascript с неработающей функцией

Я делаю хромую текстовую игру, и я создал объект-плеер так:

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 в любое время после его вызова?

Ответ 1

player.health - это функция. Чтобы вызвать функцию, вы должны положить () после нее:

alert(player.health());

Ответ 2

Если вы хотите создать свойство с помощью 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

Ответ 3

Вам нужно вызвать функцию, player.health()