尝试将值分配给相同的 属性 内部访问器集时,超出了最大调用堆栈大小
Maximum call stack size exceeded when trying to assign value to the same property inside accessor set
以下对象使用 set birthdate accesor 来设置用户的年龄,它工作正常。
const user = {
set birthdate(value) {
if (isNaN(Date.parse(value))) {
throw new Error("Invalid date format");
}
const valueYear = new Date(value).getFullYear();
const todayYear = new Date().getFullYear();
const age = todayYear - valueYear;
if (age < 18) {
throw new Error("Invalid user age");
}
this.age = age;
},
};
user.birthdate = "1980-01-29";
console.log(user.age);
现在我需要获取生日,但是当我在 set 访问器中尝试 this.birthdate = new Date(value);
时,我收到 InternalError: too much recursion
错误消息
const user = {
set birthdate(value) {
if (isNaN(Date.parse(value))) {
throw new Error("Invalid date format");
}
const valueYear = new Date(value).getFullYear();
const todayYear = new Date().getFullYear();
const age = todayYear - valueYear;
if (age < 18) {
throw new Error("Invalid user age");
}
this.birthdate = new Date(value); // when adding this line the error occurs
this.age = age;
},
};
user.birthdate = "1980-01-29";
console.log(user.age);
在对象中使用 属性 获取生日设置值的正确方法是什么?
这里的问题是您已经为 birthdate
属性 定义了 setter,因此任何尝试设置 birthdate
属性 的值都会导致在调用 setter 函数时。由于您在 setter 函数中设置 this.birthdate
,因此会一次又一次地递归调用此函数。
您需要使用不同的 属性 名称来存储出生日期
const user = {
set birthdate(value) {
if (isNaN(Date.parse(value))) {
throw new Error("Invalid date format");
}
const valueYear = new Date(value).getFullYear();
const todayYear = new Date().getFullYear();
const age = todayYear - valueYear;
if (age < 18) {
throw new Error("Invalid user age");
}
this.bDate = new Date(value);
this.age = age;
},
};
user.birthdate = "1980-01-29";
console.log(user.age);
console.log(user.bDate.toDateString());
以下对象使用 set birthdate accesor 来设置用户的年龄,它工作正常。
const user = {
set birthdate(value) {
if (isNaN(Date.parse(value))) {
throw new Error("Invalid date format");
}
const valueYear = new Date(value).getFullYear();
const todayYear = new Date().getFullYear();
const age = todayYear - valueYear;
if (age < 18) {
throw new Error("Invalid user age");
}
this.age = age;
},
};
user.birthdate = "1980-01-29";
console.log(user.age);
现在我需要获取生日,但是当我在 set 访问器中尝试 this.birthdate = new Date(value);
时,我收到 InternalError: too much recursion
错误消息
const user = {
set birthdate(value) {
if (isNaN(Date.parse(value))) {
throw new Error("Invalid date format");
}
const valueYear = new Date(value).getFullYear();
const todayYear = new Date().getFullYear();
const age = todayYear - valueYear;
if (age < 18) {
throw new Error("Invalid user age");
}
this.birthdate = new Date(value); // when adding this line the error occurs
this.age = age;
},
};
user.birthdate = "1980-01-29";
console.log(user.age);
在对象中使用 属性 获取生日设置值的正确方法是什么?
这里的问题是您已经为 birthdate
属性 定义了 setter,因此任何尝试设置 birthdate
属性 的值都会导致在调用 setter 函数时。由于您在 setter 函数中设置 this.birthdate
,因此会一次又一次地递归调用此函数。
您需要使用不同的 属性 名称来存储出生日期
const user = {
set birthdate(value) {
if (isNaN(Date.parse(value))) {
throw new Error("Invalid date format");
}
const valueYear = new Date(value).getFullYear();
const todayYear = new Date().getFullYear();
const age = todayYear - valueYear;
if (age < 18) {
throw new Error("Invalid user age");
}
this.bDate = new Date(value);
this.age = age;
},
};
user.birthdate = "1980-01-29";
console.log(user.age);
console.log(user.bDate.toDateString());