1

想象一个任务,其中有一组具有type属性的资源。基于此type,需要执行不同的功能。实现这一点的一种方法是通过多个 if/else 或 switch/case 条件。

// at run time (run many times)
if (resources[ix].type == 'TYPE_ONE') {
    runFuctionOne();
}
else{
    runFuctionTwo();
}

另一种方法是维护一个更多的属性,例如execute将分配一个满足资源的type. 那么你就不需要 if/else 条件并且可以直接执行它的功能,比如:

// at assign time (run once)
if (resources[ix].type == 'TYPE_ONE') {
    resources[ix].execute = runFunctionOne;
}
else{
    resources[ix].execute = runFuctionTwo;
}

// then at run time (run many times)
resources[ix].execute();

那么,哪种方式效率更高呢?有没有更好的办法?

编辑:我对在 Node.js 环境而不是浏览器环境中有效的解决方案更感兴趣。

4

1 回答 1

2

我认为功能映射将是一个更好的选择。

定义全局地图

var fns = {
    'TYPE_ONE' : runFunctionOne,
    'TYPE_TWO' : runFunctionTwo
};

然后使用它

var fn = fns[resources[ix].type];
if (typeof fn == 'function') {
    fn()
}

或者使用开关

var fn;
switch (resources[ix].type) {
    case "TYPE_ONE" :
        fn = runFunctionOne;
        break;
    case '' :
        // execute code block 2
        break;
    default :
        //
}

fn()
于 2013-04-02T05:27:08.717 回答