HarmonyOS 鸿蒙Next不支持function.bind

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next不支持function.bind

cke_185.png

“Function.bind” is not supported (arkts-no-func-bind) <ArkTSCheck>

3 回复

arkts-no-func-bind当前应该是warn级别告警,不是error级别,还是可以用的。

只是你这里应该是想弹窗调用父组件的函数,我这边试,this.startGame为了调用bind,把startGam的()去掉了,导致弹框调用startGame不生效。去掉bind(this),直接传this.startGame()是ok的。

示例代码:

// xxx.ets
[@CustomDialog](/user/CustomDialog)
struct CustomDialogExample {
 controller?: CustomDialogController
 add: () => void = () => {
 }

 build() {
   Column() {
     Button('加1')
       .onClick(() => {
         this.add()
       })
     Button('点我关闭弹窗')
       .onClick(() => {
         if (this.controller != undefined) {
           this.controller.close()
         }
       })
       .margin(20)
   }
 }
}

[@Entry](/user/Entry)
[@Component](/user/Component)
struct CustomDialogUser {
 dialogController: CustomDialogController | null = new CustomDialogController({
   builder: CustomDialogExample({
     add: () => {
       this.add()
     }
   }),
   autoCancel: true,
   onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
     console.info("reason=" + JSON.stringify(dismissDialogAction.reason))
     console.log("dialog onWillDismiss")
     if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
       dismissDialogAction.dismiss()
     }
     if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
       dismissDialogAction.dismiss()
     }
   },
   alignment: DialogAlignment.Center,
   offset: { dx: 0, dy: -20 },
   customStyle: false,
   cornerRadius: 20,
   width: 300,
   height: 200,
   borderWidth: 1,
   borderStyle: BorderStyle.Dashed, //使用borderStyle属性,需要和borderWidth属性一起使用
   borderColor: Color.Blue, //使用borderColor属性,需要和borderWidth属性一起使用
   backgroundColor: Color.White,
   shadow: ({
     radius: 20,
     color: Color.Grey,
     offsetX: 50,
     offsetY: 0
   }),
 })

 // 在自定义组件即将析构销毁时将dialogController置空
 aboutToDisappear() {
   this.dialogController = null // 将dialogController置空
 }

 add() {
   this.num = this.num + 1
 }

 [@State](/user/State) num: number = 1

 build() {
   Column() {
     Button('click me')
       .onClick(() => {
         if (this.dialogController != null) {
           this.dialogController.open()
         }
       }).backgroundColor(0x317aff)

     Text(this.num.toString())
   }.width('100%').margin({ top: 5 })
 }
}
现在arkts不支持bind(this)了

在HarmonyOS鸿蒙Next系统中,如果发现function.bind方法不被支持,这可能是由于系统或JavaScript引擎对ECMAScript标准的特定实现差异导致的。Function.prototype.bind()是ECMAScript 5(ES5)中引入的一个方法,用于创建一个新的函数,这个新函数的this值会被设置为指定的值,并且在调用时,其前几个参数会被预设为指定的值。

HarmonyOS作为新兴的操作系统,可能在某些版本的JavaScript引擎中尚未全面支持ES5的所有特性,或者在特定的系统配置下存在实现差异。针对此问题,可以考虑以下几种解决方案:

  1. 使用箭头函数:箭头函数不会绑定自己的this,它会捕获其所在上下文的this值,因此可以作为bind的一种替代方式。

  2. 显式传递this:在函数调用时显式地传递this参数,通过调用约定而非bind来指定函数的上下文。

  3. 升级或配置JavaScript引擎:如果可能,尝试升级HarmonyOS系统中的JavaScript引擎到支持bind的版本,或者检查系统配置,确保JavaScript执行环境符合需求。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部