D3.js 项目符号图表示例

D3.js 项目符号图表示例,d3.js,bullet-chart,D3.js,Bullet Chart,我在引用 我有几个问题可以帮助澄清在这个例子中发生了什么 1)在bulletChart函数中,表单中有8个声明 bullet.ranges=function(x){},bullet.markers=function(x){}等等。这个bullet对象来自哪里?它建在图书馆里吗?我以为我们已经将变量范围设置为函数bulletRanges,或者这两个变量的范围是不同的 2)这些函数中到底发生了什么 3)最后一个问题。bulletChart函数开始执行时,它是在执行时开始执行bullet函数,还是等待

我在引用

我有几个问题可以帮助澄清在这个例子中发生了什么

1)在bulletChart函数中,表单中有8个声明 bullet.ranges=function(x){},bullet.markers=function(x){}等等。这个bullet对象来自哪里?它建在图书馆里吗?我以为我们已经将变量范围设置为函数bulletRanges,或者这两个变量的范围是不同的

2)这些函数中到底发生了什么

3)最后一个问题。bulletChart函数开始执行时,它是在执行时开始执行bullet函数,还是等待显式调用?因为我从来没有看到bullet(g)被显式调用过

这个库可能真的很混乱。非常感谢您的帮助。

1)名称开头的
项目符号是指第70行中创建的同名函数。这些调用向对象添加成员,该对象也是可调用的。它基本上是一种允许定制返回对象的方法。在OO术语中,
bullet
是一个对象,函数为其成员定义访问器。功能
bulletRanges
等为外部
bulletChart
功能提供类似的功能。用面向对象的术语来说,考虑嵌套对象

2) 见1。这些函数是
bullet
函数中定义的变量的访问器,允许以这种方式自定义行为。同样,OO等价物是通过访问器公开的对象的私有成员

3)
bullet
函数的返回值是可调用对象。这是
bulletChart
返回的内容。因此,本例中的函数调用发生在第19行和第36行(通过d3函数),方法是将变量
chart
传递给
.call
函数。第5行中
chart
的赋值调用了构造对象和可调用闭包的代码


如果您不熟悉Javascript,可以查阅一些关于其更奇特功能(如闭包)的教程资料。

感谢您为我澄清这一点,Lars,这是一个很大的帮助。我用javascript做过不同的事情,但我绝对不是专家。我将查看一些更高级的教程。再次感谢