我正在尝试创建一个基于文本的虚拟宠物护理游戏。我希望能够给您两个宠物(具有属性的对象)和通过修改对象属性与这些对象进行交互的函数。所以这是我所拥有的:

function Pet(pet_name){
    this.pet_name = pet_name;
    this.pet_hunger = Math.floor((Math.random() * 10) + 1);
    this.pet_health = Math.floor((Math.random() * 10) + 1);
    this.pet_happiness = Math.floor((Math.random() * 10) + 1);

    this.feed = feed;
    this.show = show;
}

pet1 = new Pet("Brian");
pet2 = new Pet("Lassy");

function feed(){
    var amount = Math.floor((Math.random() *2) + 1);
    this.pet_hunger = this.pet_hunger - amount;
    if (this.pet_hunger < 0){
        this.pet_hunger = 0;
    }
    this.show();
 }

function show(){
    var the_string = "";
    if (this.pet_health === 0){
        the_string = this.pet_name + " is dead!";
    }
    else {
        the_string += "Name: " + this.pet_name;
        the_string += "Hunger: " + this.pet_name;
        the_string += "Health: " + this.pet_health;
        the_string += "Happiness: " + this.pet_happinesss;
    }
}


当我运行代码时:

console.log(pet1);
console.log(pet1.feed());
console.log(pet1);


我收到以下信息:

{ pet_name: 'Brian',
  pet_hunger: 4,
  pet_health: 4,
  pet_happiness: 10,
  feed: [Function: feed],
  show: [Function: show] }
undefined
{ pet_name: 'Brian',
  pet_hunger: 2,
  pet_health: 4,
  pet_happiness: 10,
  feed: [Function: feed],
  show: [Function: show] }


这样我们就可以看到feed函数正在工作。但是,我仍然不确定为什么显示未定义。现在,我创建了一个名为show的函数。这应该显示四个人的状态(姓名,饥饿,健康,幸福)。但是,当我尝试运行时:

console.log(pet1.show);
console.log(pet1.feed());
console.log(pet1);


我收到以下信息:

[Function: show]
undefined
{ pet_name: 'Brian',
  pet_hunger: 4,
  pet_health: 1,
  pet_happiness: 9,
  feed: [Function: feed],
  show: [Function: show] }


我不确定为什么我的show函数无法正常工作。我真的只是想让我的控制台清晰显示:
名称:
饥饿:
健康:
幸福:
有想法吗?

最佳答案

例如,提要方法可以是:

function feed(amountOfFood){
  this.hunger += amountOfFood; //Same as this.hunger = this.hunger + amountOfFood;
}


然后,您大概会有一种由用户调用此方法的方式,但是我不确定您如何计划与游戏进行交互的用户,因此无法解释更多...

07-26 00:45