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 来管理异步状态
  • 通过等待初始化完成的方法确保数据可用性
  • 事件监听模式适合需要实时响应的场景

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

相关推荐
不听话坏4 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
小二·5 小时前
React 19 + Next.js 15 现代前端开发实战:App Router / Server Components / 流式渲染
前端·javascript·react.js
CHNE_TAO_EMSM7 小时前
Android studio 打开文件时自动下载源码
前端·javascript·android studio
竹林8189 小时前
从 ethers.js 迁移到 Viem:一个签名验证 Bug 让我彻底放弃旧爱
javascript
你挚爱的强哥10 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
半个落月10 小时前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
天外天-亮10 小时前
HBuilder X 使用 uview-plus 方式
开发语言·javascript·hbuilder x·uview-plus
我有满天星辰12 小时前
Vue项目脚手架之争:create-vue与Vue CLI全面对比
前端·javascript·vue.js
多加点辣也没关系15 小时前
JavaScript|第9章:对象 — 基础
开发语言·javascript·ecmascript
我有满天星辰15 小时前
Vue 2 与 Vue 3 计算属性完全指南:从 Options API 到组合式 API 的演进
前端·javascript·vue.js