Javascript库d3调用函数

Javascript库d3调用函数,javascript,d3.js,Javascript,D3.js,我无法理解d3.call()是如何工作的,何时何地使用它。是我试图完成的教程链接 有人能具体解释一下这件作品的作用吗 var xAxis = d3.svg.axis() .scale(xScale) .orient("bottom"); svg.append("g").call(xAxis); 我认为这里的诀窍是要理解xAxis是一个生成大量SVG元素的函数。实际上,它是由d3.svg.axis()返回的函数。scale和orient函

我无法理解d3.call()是如何工作的,何时何地使用它。是我试图完成的教程链接

有人能具体解释一下这件作品的作用吗

var xAxis = d3.svg.axis()
              .scale(xScale)
              .orient("bottom");

svg.append("g").call(xAxis);

我认为这里的诀窍是要理解xAxis是一个生成大量SVG元素的函数。实际上,它是由
d3.svg.axis()
返回的函数。scale和orient函数只是链接语法的一部分(请在此处阅读更多内容:)

因此,
svg.append(“g”)
将svg组元素附加到svg,并以选择的形式返回对自身的引用(这里使用的是相同的链语法)。当您对选择项使用
call
时,您正在对选择项
g
的元素调用名为
xAxis
的函数。在这种情况下,您正在新创建和附加的组
g
上运行axis函数
xAxis

如果这仍然没有意义,那么上面的语法相当于:

xAxis(svg.append("g"));
name(d3.selectAll("div"), "John", "Snow");
或:


IMO没有给出的公认答案是,
.call()
是一个不可混淆的概念

selection.call(函数[,参数…])

只调用指定函数一次,将此选择与任何可选参数一起传入。返回此选择。这相当于手动调用函数,但有助于方法链接。例如,要在可重用函数中设置多个样式:

现在说:

d3.selectAll("div").call(name, "John", "Snow");
这大致相当于:

xAxis(svg.append("g"));
name(d3.selectAll("div"), "John", "Snow");

唯一的区别是selection.call总是返回选择,而不是被调用函数name的返回值。

您提供的链接解释了
call()
doesYea,但我仍然无法获得svg.append(“g”).call(xAxis)的内容;正在做:(参见如何编辑svg.axis()的G元素)?我有相互渗透的标签,我想对它们应用转换。但我似乎无法访问这些元素。选择文本或勾选元素后,在此处检查答案。如果需要,您应该能够应用转换。调用xAxis与调用xAxis有什么区别吗?这很好地解释了
.call()
方法。它没有特别解释调用axis对象的后果。而且它也无法证明axis对象的超现实情况同时表现为一个对象和一个函数。到底为什么要这样做?好吧,文档说调用它。这比给axis对象一个.render()好吗方法?这不支持从docs in selection调用中更直接的
xAxis.scale(…).orient(…).render(…)
“唯一的区别是selection.call总是返回选择,而不是被调用函数name的返回值。”