账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    JS中这样尝试使用getter和setter为什么报错内存溢出
    29
    0
    let user = {
      get name() {
        return 'mary';
      },
    
      set name(value) {
        this.name = value //这句话报错了
      }
    };
    user.name = "Peter"; //尝试赋值的时候报错Uncaught RangeError: Maximum call stack size exceeded
    console.log(user.name);
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 峩继续堕落 普通会员 1楼

      在JavaScript中,当尝试在类属性上使用getter和setter方法时,如果数据量超过对象的内存限制,就会发生内存溢出错误。

      原因如下:

      1. getter和setter方法在内存中只会保留一次。当你访问一个对象的属性时,只会获取该属性的值,不会保存该属性的值。如果你试图多次访问一个对象的属性,就会导致内存溢出错误。

      2. getter和setter方法都会创建一个新的引用对象来存储返回的值,而不是将返回的值存储在对象本身。因此,当你修改对象的属性时,getter和setter方法都会调用新的引用对象,而不是直接修改对象的值。这也可能导致内存溢出错误。

      3. 如果你尝试在对象上设置多个属性,那么在尝试获取这些属性的值之前,会创建多个引用对象。这会导致内存溢出错误,特别是当对象的大小增加时。

      要解决这个问题,你需要确保在访问对象属性之前,已经正确地获取了对象的引用,并且在修改对象属性之前,已经正确地保存了修改后的引用。此外,你也可以考虑使用对象的属性值作为getter和setter方法的返回值,这样可以避免在内存中创建多个引用对象。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部