我遇到一个错误,如果我声明了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)处超出了最大调用堆栈大小
答案 0 :(得分:3)
当您有一个属性的设置器时,任何设置该属性的内容都将隐式调用该设置器,即使从设置器函数中也是如此。当一个函数无条件地直接调用自身时,您会得到该堆栈错误。
通常,人们对“随播广告”属性使用某种约定,例如:
set varsta(val) {
console.log(`setter varsta: ${val}`);
this._varsta = val;
}
在这种情况下,您还需要一个吸气剂:
get varsta() { return this._varsta; }