这个问题已经在这里有了答案:




9年前关闭。






与Protovis进行交易-他们实现了一些奇怪的委托(delegate)函数,而这些函数没有花括号就可以提供-有人可以帮我掩盖一下吗?
例:

vis.add(pv.Label)
.data(cols)
.left(function() this.index * w + w / 2)
.top(0)
.textAngle(-Math.PI / 2)
.textBaseline("middle");

最佳答案

通常,,如question @missingno linked to中所述,这是用于声明功能的备用语法,主要受Firefox支持。代替:

function() { return "stuff" };

您省略了花括号和return语句:
function() "stuff";

函数的结尾发生在正常语句可能会结束的任何地方-分号(;),逗号(,)或右括号())。

在Protovis 中,在许多情况下,您需要声明简短的单语句匿名函数以作为方法调用的参数传递。这是一种常见的模式,该库包含一个解析实用程序,以确保Firefox以外的浏览器都支持上述语法。如果将Protovis代码包含在脚本标签中,如下所示:
<script type="text/javascript+protovis">
// ...
</script>

该脚本将由Protovis解析器评估,以确保支持特殊语法。

我的两分钱是:这种语法的优点在于它确实非常快(加上所有示例都使用了它)。使用Protovis的典型脚本涉及许多匿名函数,因此可以节省一些键入时间,并且看起来很棒。当我第一次开始使用Protovis时,我经常使用它-不仅用于方法调用,而且还用于变量声明。

但是,它有一些非常严重的问题:
  • 因为所有代码都是通过Protovis解析器运行的,因此本质上会修改代码以重新添加return语句,然后再对其进行eval(),因此调试简单的语法错误变得异常困难。您将获得所有这些Protovis代码中指向eval()行的“意外标识符”错误,而没有指示问题(在您自己的代码中)是在哪里发生的(缺少分号等)。
  • 如果要使代码在Firefox外部运行,则必须将所有代码包含在特殊的javascript+protovis脚本标记中,这意味着没有外部文件。一旦开始执行甚至微不足道的复杂性操作,您实际上就想在大多数情况下将脚本分开。
  • 与任何“聪明”语法一样,它真的很难阅读,尤其是当您以意外的方式使用它时(例如,在方法调用之外)。是的,这很简洁,但是要清楚易读就必须付出一定的代价。

  • 综上所述,当我想快速绘制粗略草图时,我仍会使用它。但是大多数时候,我建议坚持使用常规脚本标签和标准的,带有花括号的函数声明。

    10-07 18:14