以字符串形式提供函数名称的 JS 模式

JS pattern providing function name as string

最近,我发现自己将函数名称作为字符串参数传递给另一个函数,使用 typeof 检查它是否存在,并在必要时调用它。

我在写这篇文章时意识到我可以传递一个函数引用。

我的问题是,"pass function name as a string" 模式是否有通用名称?而且,它是一种反模式吗?我通常应该尽可能使用引用吗?

我不知道它有名字,但它绝对是一个反模式。它更难,而且 iirc 实际上它在内存上会比仅仅发送函数引用更糟糕。

function doThisThing() {}
var action = 'doThisThing';

你看我实际上在内存中创建了两个东西,每个东西都有一个指针。

var action = function() {}

在这里,我在内存中创建了一个项目,action只是一个指向它的指针。然后超级简单

if (action) action();

甚至更短

action && action();

仅仅传递一个引用就容易多了。只是:一个参考。它几乎没有开销,而且更容易。

我不知道具体命名的模式,但如果你将它与通过 eval 调用该函数结合起来,那么我会说这是反模式。

好的

var obj = {
    foo: function() {},
    bar: function() {},
    execute: function(fnName) {
        this[fnName]();
    }
};

obj.execute("foo");

不好

var obj = {
    foo: function() {},
    bar: function() {},
    execute: function(fnName) {
        eval("obj." + fnName + "()");
    }
};