HarmonyOS 鸿蒙Next遇到class constructor cannot called without 'new',但检查后并没有发现缺少new的关键字

发布于 1周前 作者 bupafengyu 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next遇到class constructor cannot called without ‘new’,但检查后并没有发现缺少new的关键字

import { CommonConstants } from '../../common/constants/CommonConstants'
import DateUtil from '../../common/utils/DateUtil'
import DatepickDialog from './DatePickDialog'
@Component
export  default struct StaticCard {
  @StorageProp('selectedDate') selectedDate:number=DateUtil.beginTimeOfDay(new Date())

  controller:CustomDialogController= new CustomDialogController({
    builder:DatepickDialog({selectedDate:new Date(this.selectedDate)})
  })
  build() {
    Column(){
    //1.日期
      Row(){
        Text(DateUtil.formatDate(this.selectedDate)).fontColor($r('app.color.secondary_color'))
        Image($r('app.media.ic_public_spinner')).width(20).fillColor($r('app.color.secondary_color'))

      }.padding(CommonConstants.SPACE_8)
      //2.统计信息
      .onClick(()=>{
        this.controller.open()
      })
    }
    .width(CommonConstants.THOUSANDTH_940)
    .backgroundColor($r('app.color.stats_title_bgc'))
    .borderRadius(CommonConstants.DEFAULT_18)
  }
}

import { CommonConstants } from '../../common/constants/CommonConstants'
@Component
export  default struct DatepickDialog {
  controller:CustomDialogController
  selectedDate:Date=new Date()
  build() {
    Column({space:CommonConstants.SPACE_12}){
      //1.日期选择
      DatePicker({
        start: new Date('2020-01-01'),
        end: new Date(),
        selected: this.selectedDate
      })
        .onChange((value: DatePickerResult) => {
          this.selectedDate.setFullYear(value.year, value.month, value.day)

        })
      //2.按钮
      Row({space:CommonConstants.SPACE_12}){
        Button('取消').width(120).backgroundColor($r('app.color.light_gray'))
          .onClick(()=>{
            this.controller.close()
          })
        Button('提交').width(120).backgroundColor($r('app.color.primary_color'))
          .onClick(()=>{
            //1.保存日期到全局
            AppStorage.SetOrCreate('selectedDate',this.selectedDate.getTime())
          this.controller.close()
          })
      }

    }.padding(CommonConstants.SPACE_12)
    }

}

为什么在调用

controller: CustomDialogController = new CustomDialogController({ builder: DatePickDialog({selectedDate: new Date(this.selectedDate)}) })后,我的日期组件就消失了,在preview里面不显示,注解掉这段就正常了,log里面报错class constructor cannot called without ‘new’

10 回复

有大佬帮忙看一下嘛?

预览模拟器中显示不了这个效果

好像不是这个原因,同学同样的代码可以显示出来

类似的问题,我是写了一个子类继承了CustomDialogController,封装了一些通用设置,结果也是提示这个错误。。。。

我遇到了跟你一样的问题,最后你是怎么处理的

把弹框上面的[@Component](/user/Component)改成[@CustomDialog](/user/CustomDialog)

特地登录了来给你点赞,这谁想得到

针对您提到的HarmonyOS 鸿蒙Next系统中遇到的“class constructor cannot called without ‘new’”错误,尽管您已确认代码中未缺失new关键字,这里有几个可能的原因和排查方向:

  1. 构造函数定义问题:确认类中的构造函数是否被错误地声明为普通函数或者使用了不恰当的语法(如箭头函数)。构造函数必须使用function关键字定义,且不能是类内部的箭头函数。

  2. 类继承问题:如果该类是从另一个类继承而来,检查父类的构造函数调用是否正确(使用super())。

  3. 类实例化方式:确保在创建类实例时使用了new关键字。

  4. 转译或编译问题:如果您使用了Babel或TypeScript等编译器,检查相关的配置文件和插件是否支持HarmonyOS的JavaScript特性,或者是否有转译错误。

  5. 运行时环境问题:确认您的HarmonyOS开发环境是否完全支持当前的JavaScript和ECMAScript标准。

如果以上检查均无误但问题依旧存在,可能是由于特定于HarmonyOS的JavaScript引擎的bug或其他未知因素。此时,建议您直接联系官方客服获取进一步的技术支持。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部