是否可以在 es6 类属性 setter 中实现值验证?
愚蠢的尝试失败了,并出现 Uncaught RangeError:超过了最大调用堆栈大小
,正如预期的那样:
class Something {
constructor() {
this.maxRange = 5;
this.minRange = 1;
this.selectedRange = 3;
}
set selectedRange(value) {
if (value <= this.maxRange && value >= this.minRange) {
this.selectedRange = value;
}
}
}
但是什么是正确的方法呢?有可能在 setter 中完成吗? (不使用 setProp
或 setRange
等附加方法)
最佳答案
据我所知(请随时纠正我),您不能将 setter(或 getter)与常规值混合。常规值将被覆盖。
您需要同时使用 setter 和 getter,并定义一个内部属性(例如使用下划线 _
),该属性由 getter 获取并由 setter 写入。
class Something {
constructor() {
this.maxRange = 5;
this.minRange = 1;
this._selectedRange = 3;
}
get selectedRange() {
return this._selectedRange;
}
set selectedRange(value) {
if (value <= this.maxRange && value >= this.minRange) {
this._selectedRange = value;
}
}
}
您甚至可以使内部属性不可枚举,这样它就不会出现在循环中:
class Something {
constructor() {
this.maxRange = 5;
this.minRange = 1;
Object.defineProperty(this, '_selectedRange', {
value: 3,
configurable: true,
writable: true,
enumerable: false
});
}
get selectedRange() {
return this._selectedRange;
}
set selectedRange(value) {
if (value <= this.maxRange && value >= this.minRange) {
this._selectedRange = value;
}
}
}
关于javascript - setter 中的值检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36787175/