3

我正在制作一个蹩脚的基于文本的游戏,我制作了一个像这样的对象播放器:

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以后调用的任何时候的值?

4

3 回答 3

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
于 2013-08-30T00:48:18.990 回答
10

player.health是一个函数。要调用一个函数,你必须()在它后面加上:

alert(player.health());
于 2013-08-30T00:33:05.497 回答
4

您需要调用该函数,player.health()

于 2013-08-30T00:32:58.310 回答