以字符串形式提供函数名称的 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 + "()");
}
};
最近,我发现自己将函数名称作为字符串参数传递给另一个函数,使用 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 + "()");
}
};