我有这个函数应该循环通过这些附加函数,而它们不会使总数超过 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,您可以调用 eat
或 hide
等方法。
您可以在此处查看实际效果: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/