这个问题已经在这里有了答案:
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时,我经常使用它-不仅用于方法调用,而且还用于变量声明。
但是,它有一些非常严重的问题:
return
语句,然后再对其进行eval()
,因此调试简单的语法错误变得异常困难。您将获得所有这些Protovis代码中指向eval()
行的“意外标识符”错误,而没有指示问题(在您自己的代码中)是在哪里发生的(缺少分号等)。 javascript+protovis
脚本标记中,这意味着没有外部文件。一旦开始执行甚至微不足道的复杂性操作,您实际上就想在大多数情况下将脚本分开。 综上所述,当我想快速绘制粗略草图时,我仍会使用它。但是大多数时候,我建议坚持使用常规脚本标签和标准的,带有花括号的函数声明。