js es6 class 类中的值是异步赋值, 子类中如何获取这个值?

在 ES6 类中,如果父类的属性是通过异步赋值 的,子类能否获取到这个值取决于访问时机。下面通过代码示例详细说明:

1. 同步 vs 异步赋值的区别

同步赋值(正常情况)

javascript 复制代码
class Parent {
  constructor() {
    this.syncValue = '同步值'; // 同步赋值
  }
}

class Child extends Parent {
  getValues() {
    return {
      syncValue: this.syncValue // 可以正常获取
    };
  }
}

const child = new Child();
console.log(child.getValues()); // { syncValue: '同步值' }

异步赋值的情况

javascript 复制代码
class Parent {
  constructor() {
    this.asyncValue = null;
    // 异步赋值
    setTimeout(() => {
      this.asyncValue = '异步赋值完成';
    }, 1000);
  }
}

class Child extends Parent {
  getValues() {
    return {
      asyncValue: this.asyncValue // ❌ 立即访问可能为 null
    };
  }
}

const child = new Child();
console.log(child.getValues()); // { asyncValue: null }

// 1秒后再访问
setTimeout(() => {
  console.log(child.getValues()); // { asyncValue: '异步赋值完成' }
}, 1500);

2. 解决方案

点击查看解决方案

总结

  • 子类可以获取父类的异步赋值 ,但必须在异步操作完成后
  • 立即访问可能得到 null 或初始值
  • 推荐使用 Promiseasync/await 来管理异步状态
  • 通过等待初始化完成的方法确保数据可用性
  • 事件监听模式适合需要实时响应的场景

关键在于时序控制 - 确保在访问异步值之前,相关的异步操作已经完成。

相关推荐
竹林8185 小时前
RainbowKit 快速集成多链钱包连接:从“连不上”到丝滑切换的踩坑实录
前端·javascript
嗜好ya5 小时前
解决 Vite 项目中 import.meta.env 变量为 undefined 的问题
前端·javascript·vue.js
心连欣6 小时前
JS算法入门:图解“冒泡排序”,彻底搞懂双重循环的奥义
前端·javascript
浩星6 小时前
「Vue3 + Cesium 最佳实践」完整工程化方案
前端·javascript·vue.js
小李子呢02117 小时前
前端八股Vue(5)---v-if和v-show
前端·javascript·vue.js
YiuChauvin7 小时前
vue2中使用 AntV G6
javascript·vue.js
peak_chan8 小时前
通过vue-virtual-scroller封装虚拟滚动el-select
前端·javascript·vue.js
小李子呢02118 小时前
前端八股Vue(7)---computed计算属性和watch侦听器
前端·javascript·vue.js
吴声子夜歌8 小时前
ES6——对象的扩展详解
开发语言·javascript·es6