HarmonyOS 鸿蒙Next 请问下有大佬知道怎么根据字符串调用函数
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’)
}
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(() => {
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(() => {
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开发了
这个问题用类似于java的反射应该能解决。可以参考下这个ArkTS是否支持反射调用类的静态成员函数和实例成员函数-方舟编程语言(ArkTS)-ArkTS语言-应用框架开发-开发 - 华为HarmonyOS开发者 (huawei.com)
感谢感谢
看不懂啊!
通过 字符串来调用函数,在某种情况下 只可以拿到函数的字符串
在HarmonyOS(鸿蒙)开发中,根据字符串动态调用函数通常涉及到反射(Reflection)机制,但需要注意的是,JavaScript和Dart等语言(常用于鸿蒙开发)对反射的支持与传统Java或C#等语言有所不同,它们可能不直接支持通过字符串名称来调用方法。
然而,你可以通过一些设计模式或映射机制来模拟这种行为。例如,在Dart中,你可以使用Map来存储函数引用,其中key是字符串(函数名),value是对应的函数。然后,你可以根据字符串key来从Map中检索并调用相应的函数。
如果问题依旧没法解决请加我微信,我的微信是itying888。