如果在Javascript Setter中
我尝试用Javascript创建类,并希望以特定格式设置参数。例如,类Person只接受数字格式的Age参数。如果不是,If语句将返回“请以数字格式键入年龄” 下面是我的代码:如果在Javascript Setter中,javascript,Javascript,我尝试用Javascript创建类,并希望以特定格式设置参数。例如,类Person只接受数字格式的Age参数。如果不是,If语句将返回“请以数字格式键入年龄” 下面是我的代码: class Person { constructor(name, age) { this._name = name; this._age = age; } get name() { return this._name; } get
class Person {
constructor(name, age) {
this._name = name;
this._age = age;
}
get name() {
return this._name;
}
get age() {
return this._age;
}
set age(value) {
if (value.isNaN()) {
console.log('Please type age in number format');
} else {
this._age = value;
}
}
}
const bill = new Person('bill', 'twenty');
console.log(bill.age)
我希望代码会返回“请以数字格式键入年龄”。但是,代码返回“二十”。请帮忙。两件事:
this.\u age=age
因此,您永远不会调用属性age
的get/set
,要执行此操作,您可以替换该部分代码:this.age=age
而不是this.name=name
因为属性name
没有setter,只有getter
value.isNaN()
函数不存在,必须执行isNaN(value)
或Number.isNaN(value)
第二,在这种情况下,我可以向您传递值Infinity
,这样您就可以替换为非有限值,并捕获所有NaN
和Infinity
值。同意,因为构造函数有这一点。_age=age
所以您甚至从未调用setter
如果您希望/期望代码返回“请以数字格式键入年龄”,您可以将代码修改为
...
constructor(name, age) {
this._name = name;
if (value.isNaN()) {
console.log('Please type age in number format');
} else {
this._age = value;
}
}
这将不会设置\u age
的值,如果您尝试使用(此类的)创建的对象访问它,您将获得未定义的您的构造函数具有此属性。\u age=age
因此您甚至从未调用setter。当您使用new初始化类的对象时,它将触发构造函数。在您真正“调用”setter之后,还有一个问题isNaN
不是字符串的属性,它是一个全局函数。您必须将value
作为参数传递给isNaN
,而不是将其作为方法调用。@Aplet123您能解释一下吗?
if (typeof value !== "number" || !isFinite(value)) {
...
constructor(name, age) {
this._name = name;
if (value.isNaN()) {
console.log('Please type age in number format');
} else {
this._age = value;
}
}