如何重新绑定具有相同名称的方法

时间:2014-10-02 16:24:52

标签: javascript d3.js

中编写了可重复使用的图表后,我希望公开X轴 AND Y轴的.tickFormat()方法。问题是它们都有相同的方法名称,因此我的直方图对象只能调用最近添加的.tickFormat()方法。

d3.ninja.histogram = function module() {
    var x = d3.scale.ordinal(),
        y = d3.scale.linear(),
        xAxis = d3.svg.axis().scale(x).orient('bottom').tickSize(6, 0),
        yAxis = d3.svg.axis().scale(y).orient('left').tickSize(6, 0);

    function chart(selection) {
        selection.each(function (data) {

            // make something nice

        });
    }

    // Expose the x-axis' tickFormat method.
    d3.rebind(chart, xAxis, 'tickFormat');

    // Expose the y-axis' tickFormat method.
    d3.rebind(chart, yAxis, 'tickFormat');

    return chart;
}

Mike Bostock mentions that

  

重绑定运算符允许将继承的方法(混合)反弹到另一个对象的子类。

我真的不明白怎么做,但想知道这是否是解决问题的方法?

1 个答案:

答案 0 :(得分:1)

在这种情况下,Rebind似乎不合适,因为您可能希望为每个轴单独设置刻度格式。因此,它不是一对一的传递方案。

将它们公开为单独的属性并手动调用底层轴函数可能就是您想要的:

chart.yTickFormat = function(tickFormat) {
     yAxis.tickFormat(tickFormat);
     return chart;
};

chart.xTickFormat = function(tickFormat) {
     xAxis.tickFormat(tickFormat);
     return chart;
};

return chart;