JS能否用变量值调用方法或函数?

发布于 2022-09-06 11:44:13 字数 491 浏览 27 评论 0

先上现有代码:

function A(value) {
    console.log('called A:' + value.message);
}

function B(value) {
    console.log('called B:' + value.message);
}


var f = {
    'A': A,
    'B': B
};

var x1 = {
    message: 'x1'
};


f.B(x1);//能得到期望值:called B:im the message of x1

现在有一个值:

var x2 = {
    value: 'A',
    message: '100'
};

有什么办法能在不使用 ifswitch ,直接用x2中value的值A调用f的方法A

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

掩饰不了的爱 2022-09-13 11:44:13

你这种调用写的有点绕,其实只要理解key/idx的机制即可。
可以 f[ x2.value ]( x2 )
而你目前的思路,我的话则整合成功能型:

function f( obj ) {
    let fn = {
        A() {
             console.log( `called A:${ obj.message }` )
         },
         B() {
             console.log( `called B:${ obj.message }` )
         },
    }

    fn[ obj.value ]()
}

var x2 = {
    value: 'A',
    message: '100'
};

f( x2 )    // called A:100
你没皮卡萌 2022-09-13 11:44:13

如果A/B是全局作用域
可以用 window[x2.value]() 调用

也可以使用eval

eval(`${x2.value}()`)

暗地喜欢 2022-09-13 11:44:13
typeof f[x2.value] == 'function' && f[x2.value](x2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文