在JavaScript表达式上使用eval()是否合适?

时间:2014-07-28 23:18:56

标签: javascript publish-subscribe

我目前正在阅读“基于内容的发布/订阅”设计模式,并且在其中一个实现中,它建议使用字符串形式的表达式订阅事件,即。 eventMiddleware.on("foo===bar && bool",callback)。 但是我不太确定如何处理字符串表达式中间件方面。

我一直在阅读eval是如何“邪恶”的,我不应该使用它,但在这种情况下它是否合适?有更好的方法吗?或者我是否应该完全避免使用表达式注册事件?

1 个答案:

答案 0 :(得分:0)

如果"foo===bar && bool"生成服务器端,只需将其替换为function (x) { return x === bar && whatever-you-need; }。按照您的方式编写代码,以便通过调用它来评估函数。如果你能做到这一点,你根本不需要eval。

谓词是后卫。假设你这样定义:

function on(guard, callback)
{
}

然后,在您的模式中,消息调度程序应该执行此操作:

if (tyepof(guard) === "FUNCTION" && guard(arg))
{
    callback(arg);
}

我希望这是可以理解的。