javascript 类class设置访问器setter时出现Maximum call stack size exceeded错误

Maximum call stack size exceeded这个错误的意思是调用栈溢出,但是自己写的代码基本不可能出现。所以可能的原因是A调用了B,然后B再调用A,形成了循环调用。或者说是A自己调用自己,出现了循环。

// 原本的代码
class Person {
  set name(newName) {
    // console.log('in set name');
    this.name = newName;
  }

  get name() {
    return this.name;
  }
  constructor() {
    this.name = 'azoux';
  }
};
let p1 = new Person();
p1.name = 'mer';
console.log(p1.name);

上述代码中我给name属性设置了set和get访问器属性,但是在下方p1.name = 'mer'时却出现标题所说的Maximum call stack size exceeded这个错误
结果竟然是因为我代码中在set函数里对name进行修改的时候
this.name = newName,这一行代码会再次调用set
也就出现了Maximum call stack size exceeded的错误
只要把name改成name_即可

// 正确代码
class Person {
  set name(newName) {
    // console.log('in set name');
    this.name_ = newName;
  }

  get name() {
    return this.name_;
  }
  constructor() {
    this.name = 'azoux';
  }
};

let p1 = new Person();
p1.name = 'mer';
console.log(p1.name);
posted @ 2022-02-13 17:42  azoux  阅读(285)  评论(0编辑  收藏  举报