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

利维坦少女
  • 3.4k

先上现有代码:

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

回复
阅读 3.9k
3 个回答
sunbeyond
  • 589
✓ 已被采纳

你这种调用写的有点绕,其实只要理解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
hack_qtxz
  • 2.6k

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

也可以使用eval

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

typeof f[x2.value] == 'function' && f[x2.value](x2)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏