简体   繁体   中英

declaring javascript object property with a function not working

I'm making a lame text-based game, and I made an object player like so:

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
}

My understanding is that you can give an object a function as a property.

However, when I alert(player.health) I get:

function() { return 10 + (this.level * 15) }

What am I doing wrong? Are you not able to declare a object property that way? Is there a way to auto-generate the value of player.health any time it's called later on?

If you want to create property with accessor on JS object, proper way to do this is to use Object.defineProperty .

In your case:

// 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

player.health is a function. To call a function, you have to put () after it:

alert(player.health());

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM