具有以下构造函数:
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
Object.defineProperty(this, 'lastName', {
get() {
return lastName;
},
set(value) {
if (!value) {
throw new Error('Last name is required');
}
lastName = value;
}
});
Object.defineProperty(this, 'fullName', {
get() {
return `${this.firstName} ${this.lastName}`;
}
});
}
在这里我希望调用该错误,因为我在构造函数中省略了lastName属性的值
try {
let person = new Person('john');
console.log(person.fullName);
} catch (error) {
console.log(`ValidationError: ${error.message}`);
}
但是我却得到了输出john undefined
调用错误的唯一方法是如果我从对象中显式调用了属性。
try {
let person = new Person();
person.firstName = 'john';
person.lastName = '';
console.log(person.fullName);
} catch (error) {
console.log(`ValidationError: ${error.message}`);
}
我在这里收到预期的消息ValidationError: Last name is required
。
在构造函数中进行设置时,执行验证的正确方法是什么?
答案 0 :(得分:0)
在构造器中设置属性后,在 中定义lastName
getter / setter对。要使其工作,首先 定义属性,然后进行设置。或者您只是这样做:
function Person(firstName, lastName) {
if(!lastName) throw new Error("lastName is required");
this.firstName = firstName;
this.lastName = lastName;
}