Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在Javascript Setter中_Javascript - Fatal编程技术网

如果在Javascript Setter中

如果在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

我尝试用Javascript创建类,并希望以特定格式设置参数。例如,类Person只接受数字格式的Age参数。如果不是,If语句将返回“请以数字格式键入年龄”

下面是我的代码:

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;
            }
        }