我正在尝试使用d3.js制作可重用的图表。这些代码有效,但是它们非常多余。

我正在尝试简化以下代码:

function myChart(){
    // default properties
    var svgWidth = 1000,
        svgHeight = 250;

    function chart(selection){
       // do something with the previous properties ....
    }

    // define setter-getter functions
    chart.svgWidth = function(_){
        if(!arguments.length) return svgWidth;
        svgWidth = _;
        return chart;
    };
    chart.svgHeight = function(_){
        if(!arguments.length) return svgHeight;
        svgHeight = _;
        return chart;
    };

    return chart;
}


如您所见,所有的setter-getter函数都非常相似。如果要设置的属性很多,例如10,则setter-getter函数将堆积得很长。

那么有人能简化它吗?

最佳答案

吻:定义一个defaults对象并对其键进行迭代以创建新的属性:

function myChart(){
    // default properties
    var defaults = {
      svgWidth: 1000,
      svgHeight: 250
    }

    function chart(selection){
       // do something with the previous properties ....
    }

    Object.keys(defaults).forEach((key) => {
      chart[key] = function(_) {
        if(!arguments.length) return defaults[key];
        defaults[key] = _;
        return chart;
      };
    });

    return chart;
}

关于javascript - 如何简化getter-setter功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42160370/

10-13 05:56