鍍金池/ 問答/Java  C++  網(wǎng)絡(luò)安全  HTML/ JS能否用變量值調(diào)用方法或函數(shù)?

JS能否用變量值調(diào)用方法或函數(shù)?

先上現(xiàn)有代碼:

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

現(xiàn)在有一個(gè)值:

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

有什么辦法能在不使用 ifswitch ,直接用x2中value的值A調(diào)用f的方法A

回答
編輯回答
凝雅

你這種調(diào)用寫的有點(diǎn)繞,其實(shí)只要理解key/idx的機(jī)制即可。
可以 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
2017年9月12日 00:39
編輯回答
孤客

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

也可以使用eval

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

2017年12月23日 08:54
編輯回答
懶洋洋
typeof f[x2.value] == 'function' && f[x2.value](x2)
2017年3月30日 03:21