我正在制作一个基于文本的蹩脚游戏,我制作了一个像这样的对象玩家:
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
的值?
答案 0 :(得分:11)
如果要在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
答案 1 :(得分:8)
player.health
是一个功能。要调用函数,您必须在其后面添加()
:
alert(player.health());
答案 2 :(得分:3)
您需要调用函数player.health()