HarmonyOS 鸿蒙Next 请问下有大佬知道怎么根据字符串调用函数

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

HarmonyOS 鸿蒙Next 请问下有大佬知道怎么根据字符串调用函数

@Entry
@Component
struct GridExample {

build() {
Column({space:10}) {

Button(‘funct1’).onClick(()=>{
wang(‘funct1’)
}).backgroundColor(Color.Red)

Button(‘funct2’).onClick(()=>{
wang(‘funct2’)
}).backgroundColor(Color.Blue)

}
}

}

function wang(funct:string) {
我现在要在这个函数里面通过(funct这个字符串)来调用调用下边的函数
}
function funct1() {
console.log(‘我是funct1’)
}
function funct2() {
console.log(‘我是funct2’)
}

7 回复

ets不可以,ts可以

src/main/ets/util/Page79TS.ts

export function wang(funct: string) {
  // 我现在要在这个函数里面通过(funct这个字符串)来调用调用下边的函数
  new Page79TS()[funct]()
}

class Page79TS { funct1 = () => { console.log(‘我是funct1’) }

funct2() { console.log(‘我是funct2’) } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

src/main/ets/pages/Page79.ets

import { wang } from ‘…/util/Page79TS’;

@Entry @Component struct Page79 { @State message: string = ‘Hello World’;

build() { Column({ space: 10 }) {

  Button(<span class="hljs-string"><span class="hljs-string">'funct1'</span></span>).onClick(() =&gt; {
    wang(<span class="hljs-string"><span class="hljs-string">'funct1'</span></span>)
  }).backgroundColor(Color.Red)

  Button(<span class="hljs-string"><span class="hljs-string">'funct2'</span></span>).onClick(() =&gt; {
    wang(<span class="hljs-string"><span class="hljs-string">'funct2'</span></span>)
  }).backgroundColor(Color.Blue)

}
.height(<span class="hljs-string"><span class="hljs-string">'100%'</span></span>)
.width(<span class="hljs-string"><span class="hljs-string">'100%'</span></span>)

} }

<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

打印

我是funct1
我是funct2<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

谢了兄弟,忘记可以使用ts开发了

看不懂啊!

通过 字符串来调用函数,在某种情况下 只可以拿到函数的字符串

在HarmonyOS(鸿蒙)开发中,根据字符串动态调用函数通常涉及到反射(Reflection)机制,但需要注意的是,JavaScript和Dart等语言(常用于鸿蒙开发)对反射的支持与传统Java或C#等语言有所不同,它们可能不直接支持通过字符串名称来调用方法。

然而,你可以通过一些设计模式或映射机制来模拟这种行为。例如,在Dart中,你可以使用Map来存储函数引用,其中key是字符串(函数名),value是对应的函数。然后,你可以根据字符串key来从Map中检索并调用相应的函数。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部