具有最小值和最大值的Javascript变量

时间:2019-07-18 12:59:50

标签: javascript

我经常需要一个具有定义的最小值和最大值的变量。例如,假设我有一个变量myVariable,它的值范围可以从5到20。如果将值设置为大于20,则将值设置为20。如果将值设置为小于5,则将值设置为20。设置为5。

最后我添加了一个小例子。我使用带有函数setVal的对象来确保将值设置在范围之间。

有没有一种方法可以使该对象的使用更容易?最好的方法是:

var myValue = new MyValue(2, 20); //min , max
myValue = 40; //myValue is set to 20
myValue = 15; //myValue is set to 15
myValue = -111; //myValue is set to 2

我只是不确定是否可行?

最有效的解决方法是什么? (因为我将在很多地方使用它,并且会改变很多值)。

这里是上面提到的工作示例的示例:

function MyValue(min, max) {
  this.val = 0;
  this.min = min;
  this.max = max;

  this.setVal = function(v) {
    if(v < min) {
     this.val= min;
    } else if(v > max) {
     this.val = max;
    } else {
    this.val = v
    }
  }
}

//tests
myvalue = new MyValue(2, 10); //create New MyValue with min = 2, max = 10
myvalue.setVal(5); //set 5, 5 is within the range
console.log(myvalue.val); //output: 5

myvalue.setVal(12); //set 12, 12 is outside the range
console.log(myvalue.val); //output 10

myvalue.setVal(1); //set 1, 1 is outside the range
console.log(myvalue.val); //output 2

myvalue.setVal(-25); //set -25, -25 is outside the range
console.log(myvalue.val); //output 2

2 个答案:

答案 0 :(得分:1)

这是您尝试执行的操作之一

function getMinMaxValue(min, max) {
  let value
  return {
    get current() {
      return value
    },
    set current(val) {
      if (val > max) value = max
      else if (val < min) value = min
      else value = val
    }
  }
}

const value = getMinMaxValue(5, 20)

value.current = 1

console.log(value.current)

答案 1 :(得分:0)

您需要一个闭包来模拟私有变量:

function MyValue(min, max) {
  let value;

  return {
    get() {
      return value;
    },
    set(newValue) {
      value = (newValue < min) ? min : (newValue > max) ? max : newValue;  
    }
  };
}

const value = new MyValue(1, 10)

value.set(5);
value.get(); // 5

value.set(600);
value.get(); // 10