声明具有无效功能的javascript对象属性

时间:2013-08-30 00:29:33

标签: 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的值?

3 个答案:

答案 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()