我经常需要一个具有定义的最小值和最大值的变量。例如,假设我有一个变量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
答案 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