JavaScript:未捕获的RangeError

时间:2018-11-25 15:11:47

标签: javascript

我遇到一个错误,如果我声明了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)处超出了最大调用堆栈大小

1 个答案:

答案 0 :(得分:3)

当您有一个属性的设置器时,任何设置该属性的内容都将隐式调用该设置器,即使从设置器函数中也是如此。当一个函数无条件地直接调用自身时,您会得到该堆栈错误。

通常,人们对“随播广告”属性使用某种约定,例如:

set varsta(val) {
    console.log(`setter varsta: ${val}`);
    this._varsta = val;
}

在这种情况下,您还需要一个吸气剂:

get varsta() { return this._varsta; }