javascript - JavaScript:未捕获的 RangeError
问题描述
我有一个错误,如果我声明this.property
而不是this._property
. 这里有什么问题?
这是代码:
class Persoana {
constructor(prenume, nume, varsta) {
this.prenume = prenume;
this.nume = nume;
this.varsta = varsta;
}
get info() {
return `${this.prenume} ${this.nume}`;
}
set varsta(val) {
console.log(`setter varsta: ${val}`);
this.varsta = val;
}
}
let ray = new Persoana("ray", "stone", 30);
console.log(ray.info);
我有这个错误:
未捕获的 RangeError:Persoana.set varsta [as varsta] 超出了最大调用堆栈大小(practice4.js:25)
解决方案
当您有一个属性的 setter 时,任何设置该属性的东西都将隐式调用 setter——即使在 setter 函数中也是如此。当一个函数直接无条件地调用自己时,你会得到那个堆栈错误。
通常,人们对“伴随”属性使用某种约定,例如:
set varsta(val) {
console.log(`setter varsta: ${val}`);
this._varsta = val;
}
在这种情况下,您还需要一个吸气剂:
get varsta() { return this._varsta; }
推荐阅读
- module - 有没有办法关闭 SAP ABAP 中的嵌套弹出窗口并返回上一个?
- react-native - layoutAnimation 在两个视图之间切换时会在 Android 上导致额外的蓝色背景
- kotlin - 在 Kotlin 中使用 println 奇怪地重定向到 stderr
- import - 有没有办法迁移包含关系的 neo4j 数据库?
- excel - 在活动单元格下的表格中添加一行
- c# - 使用附加属性从 View 更新 ViewModel
- python - python - 如何检查df中所有列的dtypes在python中是否相同?
- sql - 在 ClickHouse 中将列数据透视到 NxM 表中
- netsuite - 我们如何从记录顶部删除/更改销售订单状态的标签?
- webrtc - 从源头构建 Jitsi 的令人费解的斗争