javascript - 方法改变的条件 If 语句

标签 javascript object if-statement

我有这个函数应该循环通过这些附加函数,而它们不会使总数超过 100。但是,迭代停止,我需要它来完成饥饿和危险值是 100 或0 取决于哪个。通过的数字首先是:(50,50) 第二:(0, 100)。当不再满足 if 条件时,我似乎无法弄清楚如何更改加法/减法量。在检查条件值之前,我的控制台都显示最后一次迭代。

问题是:

创建一个名为 frodo 的函数。 frodo 将接收两个参数: startingHungerValue(数字)和 startingDangerValue(数字)。 frodo 需要将这些值存储在内部变量中。

frodo 然后会返回一个对象,有两个方法: 第一个方法将称为 dinnerOverFire。 dinnerOverFire 将减少 25 点饥饿度并增加 40 点危险。

第二个方法将被称为 hidingInBush。 hidingInBush 会使饥饿值增加 35,危险值降低 20。

这两种方法都需要返回一个结构如下的对象:

{ 饥饿:(修改后的饥饿值), 危险:(修改后的危险值)

注意:饥饿值和危险值都不能超过 100 或低于 0。

function frodo(startingHungerValue, startingDangerValue) {

  var shv = startingHungerValue;
  var sdv = startingDangerValue;

  console.log('startingHungerValue:', shv, 'startingDANGERvalue:', sdv)



  return {
    dinnerOverFire: () => {
      if ((shv >= 0 && shv < 101) && (sdv >= 0 && sdv < 101)) {
        return {
          hunger: shv - 25,
          danger: sdv + 40
        }
      }
    },
    hidingInBush: () => {
      if ((shv >= 0 && shv < 101) && (sdv >= 0 && sdv < 101)) {
        return {
          hunger: shv + 35,
          danger: sdv - 20
        }
      } 
    }
  }
}

最佳答案

不是您直接要求的,但我有一种感觉,您想做如下的事情。它创建了一个 class Frodo,您可以调用 eathide 等方法。

您可以在此处查看实际效果:jsfiddle

function Frodo(startingHungerValue, startingDangerValue) {
  var self = this; //this could change per scope, self keeps a reference to the basic of the class

  //store levels
  self.hunger = startingHungerValue;
  self.danger = startingDangerValue;

  //show levels method
  self.showLevels = function(){
    console.log('My hungerlevel: '+ self.hunger);
    console.log('My dangerlevel: '+ self.danger); 
    console.log('------'); 
  }

  //dinner method
  self.dinnerOverFire = function() {
    var newHunger = self.hunger - 25;
    var newDanger = self.danger + 40;

    if (newHunger<0) {
        newHunger = 0; //no negatives
    }

    if (self.hunger==0) {
        console.log('I\'m not hungry! No dinner!');
      console.log('------'); 
      return;       
    }
    if (newDanger>100) {
        console.log('Eating now would kill me! No dinner!');
      console.log('------'); 
      return;       
    }
    self.hunger = newHunger;
    self.danger = newDanger;

    console.log('Thanks for dinner!');
    self.showLevels();
  }

  //hiding method
  self.hideInBush = function() {
    var newHunger = self.hunger + 35;
    var newDanger = self.danger - 20;

    if (newDanger<0) {
        newDanger = 0; //no negatives
    }

    if (newHunger>100) {
        console.log('Hiding now would kill me! No hiding!');
      console.log('------'); 
      return;       
    }
    if (self.danger==0) {
        console.log('I\'m not scared at all! No hiding!');
      console.log('------'); 
      return;       
    }
    self.hunger = newHunger;
    self.danger = newDanger;

    console.log('Thanks, I feel safer already!');
    self.showLevels();
  }

  //initial message
  console.log('Hi, i\'m frodo!');
  self.showLevels();
}

//run your frodo
var frodo = new Frodo(50,50);
frodo.dinnerOverFire();
frodo.hideInBush();
frodo.dinnerOverFire();
frodo.hideInBush();
frodo.dinnerOverFire();
frodo.hideInBush();
frodo.dinnerOverFire();

这将输出:

Hi, i'm frodo!
My hungerlevel: 50
My dangerlevel: 50
------
Thanks for dinner!
My hungerlevel: 25
My dangerlevel: 90
------
Thanks, I feel safer already!
My hungerlevel: 60
My dangerlevel: 70
------
Eating now would kill me! No dinner!
------
Thanks, I feel safer already!
My hungerlevel: 95
My dangerlevel: 50
------
Thanks for dinner!
My hungerlevel: 70
My dangerlevel: 90
------
Hiding now would kill me! No hiding!
------
Eating now would kill me! No dinner!
------

这已经表明当前方式存在问题。最后他不敢吃饭,又饿得躲起来。

关于javascript - 方法改变的条件 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47587712/

相关文章:

python - 使用Python的while循环中的if/elif/else语句

javascript - 这段代码会造成内存泄漏吗?

javascript - 使用 Jquery 显示来自 Ajax 响应的数据

javascript - 从上一页识别 div 的宽度

javascript - NodeJS,多个 if 可能返回 header (并且失败)

php - 如果这个页面显示这个 其他显示这个

javascript - 如何在循环中使用 Fetch 查询?

c# - 比较两个对象

java - 整数数组的反向复制

javascript - 显示每个键的百分比