繁体   English   中英

将对象文字转换为可重用类?

[英]Turn Object Literal into Reusable Class?

是否可以在下面使用此代码并将其设置为使其易于重用,而不必每次我要创建新选项时都进行复制和粘贴:

optionA: {
  chart: {
    type: 'stacked',
    color: 'red',
    showControls: false
  }
}

现在,如果我想要另一个图表,则必须立即执行以下操作:

optionB: {
  chart: {
    type: 'line',
    color: 'yellow',
    showControls: false
  }
}

如果有一种方法可以创建一个类或某种某种形式,这样我就可以添加一个新选项而不必重用所有相同的代码,这有点好,就像隐藏了实现时不需要知道的所有内容一样。 。 我一直在寻找实现此目的的方法,但是搜索没有成功。

编辑:到目前为止,我可能没有足够的信息。 这是完整的数据:

timelineA: {
    chart: {
        type: 'stackedAreaChart',
        color: defaultColor,
        showControls: false,
        showLegend: false,
        useInteractiveGuideline: true,
        margin: margin,

        x: AnalysisTransforms.xValue,
        y: function(d){
            return d[1];
        },

        forceY: [0, 1],

        noData: $scope.translations.noData,
        xAxis: {
            showMaxMin: false,
            tickPadding: 16,
            tickFormat: AnalysisTransforms.formatDate,
            tickValues: AnalysisTransforms.xAxisTicks
        },
        yAxis: {
            tickPadding: 16,
            tickFormat: AnalysisTransforms.formatInteger
        }
    }
}

timelineB: {
    chart: {
        type: 'line',
        color: defaultColor,
        showControls: false,
        showLegend: false,
        useInteractiveGuideline: true,
        margin: margin,

        x: AnalysisTransforms.formatLine,
        y: AnalysisTransforms.linex,

        noData: $scope.translations.noData,
        xAxis: {
            showMaxMin: false,
            tickPadding: 16,
            tickFormat: AnalysisTransforms.formatParseDate,
            tickValues: AnalysisTransforms.xticks
        },
        yAxis: {
            tickPadding: 16,
            tickFormat: AnalysisTransforms.formatInteger
        }
    }
}

这是来自angular-nvd3的,在仓库中没有足够的支持让我知道。 我已经开始为此创建一个类,但是我认为我没有遵循最佳实践,因为我不知道如何将这样的对象文字转换为可以为要创建的任何图表创建的类。

我看到的是,在2和2之间使用了一些代码,而没有使用。 我希望我在这个问题上不会感到无所适从。

如:

var defaults = {
  color: defaultColor,
  showControls: false,
  showLegend: false,
  useInteractiveGuideline: true,
};

function buildChart(type, opts) {
  return Object.assign({
    type: type,
  },
  defaults,
  opts);
}

// Then you can do variations as 
var lineChart = buildChart('line', { color: '#CCC' });
var barChart = buildChart('bar', { color: 'red' });

Object.assign ,最后opts很重要,因此可以在需要时覆盖defaults

  function getObj(opts) {
     return {
        type: opts.type,
        colour: opts.colour,
        showControls: opts.showControls
     }
  }

  var b = getObj({type: 'sometype'})

您可以根据需要添加一些默认值,但是上面的应该可以

是的,您可以轻松地创建对象...如果您使用的是最近的浏览器,那么还有一种更好的方法。 但这只是一个示例

var Option = (function ()
{
     var Class = function (Type, Color)
     {
        this.chart = {
        type: Type,
        color: Color,
        showControls: false
      };
};

    (Class.prototype);
    return Class;
})();

var optionA = new Option('stacked', 'red');
var optionB = new Option('line', 'yellow');

这里是小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM