最近,我发现自己将函数名作为字符串参数传递给另一个函数,用typeof
检查它的存在,并在必要时调用它。
我在写这篇文章时意识到我可以传递一个函数引用。
我的问题是,“将函数名称作为字符串传递”模式是否具有通用名称?而且,它是一种反模式 - 我是否应该尽可能使用引用?
答案 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 + "()");
}
};