gpt4 book ai didi

javascript - 检测我正在使用哪种类型的 d3 秤

转载 作者:行者123 更新时间:2023-11-30 07:59:53 24 4
gpt4 key购买 nike

我正在使用 D3 编写一些图表组件。其中一些组件是有意通用的,因此它们可以在各种场景中重复使用。

在一个函数中,我收到一个比例对象作为参数。我想根据这是线性尺度、时间尺度还是顺序尺度采取略有不同的操作。

但是,我无法轻易看出如何检测我拥有的是哪种类型的秤。

  • instanceof 不起作用 - 这些对象不是使用 new 创建的,也没有原型(prototype)集。它们是添加了附加属性的函数对象。

  • typeof 在所有情况下(自然地)返回“object”

  • 至少在序数尺度的情况下,有一些额外的属性可以用于检测,所以我可以使用:

    if (scale.rangeBound) {
    // do something specific to ordinal scales
    }

    但对于不同类型的定量量表,情况似乎并非如此,它们似乎具有相同的属性集。

  • 我可以向我创建的每个标度添加一些属性来指示它的类型,但我不希望这样做,因为它会降低我正在创建的函数的通用性(它们需要传递给它们的标度添加了这些属性).此外,我还冒着与 D3 的 future 版本添加的某些属性发生冲突的风险。

事实上,这个问题可以扩展到 D3 中的许多对象。有什么办法可以区分它们吗?

最佳答案

您可以根据秤的行为编写检查代码,而不是内部结构,从而使自己免受代码更改的影响

function checkType(scale) {
var s = scale.copy();
if (s.domain([1, 2]).range([1, 2])(1.5) === 1)
return "ordinal";
else if (s.domain([1, 2]).range([1, 2]).invert(1.5) === 1.5)
return "linear";
else if (s.domain([1, 2]).range([1, 2]).invert(1.5) instanceof Date)
return "time";
else
return "not supported";
}

请注意,对于具有相同行为的其他/自定义比例,这仍然会出错。

fiddle - http://jsfiddle.net/enon2rjs/

关于javascript - 检测我正在使用哪种类型的 d3 秤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30748620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com