2015-10-13 77 views
0

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

我意识到,当我写这个,我可以传递函数引用。

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

+0

你能告诉你正在做什么的例子吗?你不通过参考的理由? – epascarello

+0

@epascarello - 完全没有理由,这只是我注意到的事情可以完成,我一直在玩它。没有用例强制这种行为。 – Ben

回答

2

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

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

你看,我居然在内存中创建两个东西的指针每个。

var action = function() {} 

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

if (action) action(); 

,甚至更短的

action && action(); 

它是如此容易得多只是周围传递引用。这只是一个参考。它几乎没有开销,而且更容易。

+1

谢谢Dan,这很有道理。要添加到反模式列表中,可读性(和维护)也变得更糟! – Ben

0

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

OK

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 + "()"); 
    } 
}; 
+0

Nope,no eval,只是将它称为对象的属性,例如'OBJ [fnName]()'。 – Ben