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

D3.js 如何重新绑定具有相同名称的方法,d3.js,javascript,D3.js,Javascript,在中编写了可重用图表之后,我想公开X轴和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').tic

在中编写了可重用图表之后,我想公开X轴和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;
}
迈克·博斯托克

rebind操作符允许继承的方法(mix-ins)反弹到不同对象上的子类


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

在这种情况下,重新绑定似乎不合适,因为您可能希望为每个轴分别设置刻度格式。因此,这不是一个1对1的传递场景

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

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

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

return chart;

谢谢你的回答。这实际上就是我正在做的,但我觉得我不得不管理太多的代码,并希望有一种更整洁的方法来做到这一点。似乎没有,所以我将把这个标记为已回答。谢谢:)