JS模式提供函数名称作为字符串

时间:2015-10-13 16:34:02

标签: javascript function design-patterns anti-patterns

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

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

我的问题是,“将函数名称作为字符串传递”模式是否具有通用名称?而且,它是一种反模式 - 我是否应该尽可能使用引用?

2 个答案:

答案 0 :(得分:2)

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

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

你看我实际上在内存中创建了两个东西,并指向了每个东西。

var action = function() {}

在这里,我在内存中创建了一个项目,action只是指向它的指针。那么它很容易

if (action) action();

甚至更短

action && action();

只是为了传递参考资料这么容易。它只是:一个参考。它几乎没有开销,而且更容易。

答案 1 :(得分:0)

我不知道具体命名的模式,但是如果你将它与通过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 + "()");
    }
};