Je fais un jeu textuel de texte, et j'ai fait un joueur d'objet comme ça:
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 }
Je crois comprendre que vous pouvez donner à un objet une fonction de propriété.
Cependant, lorsque alert(player.health)
je reçois:
function() { return 10 + (this.level * 15) }
Qu'est-ce que je fais mal? Ne sont-ils pas en mesure de déclarer une propriété d'objet de cette façon? Existe-t-il un moyen de générer automatiquement la valeur de player.health
tout moment, on l'appelle plus tard?
player.health
est une fonction. Pour appeler une fonction, vous devez mettre ()
après:
alert(player.health());
Si vous souhaitez créer une propriété avec l'accesseur sur l'objet JS, la manière appropriée de l'utiliser est d'utiliser Object.defineProperty
.
Dans ton cas:
// 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
Vous devez appeler la fonction, player.health()