【问题标题】:Method Chaining with Variables changing chain in JSJS中带有变量更改链的方法链接
【发布时间】:2018-08-21 22:49:47
【问题描述】:

假设有一些变量。

let itemMinify = true;
let itemResize = true;

假设我们有一个处理输入的方法链。

something.minify().resize()....etc

有没有办法根据变量说明方法是否应该包含在链中?即,如果 itemMinify 为假,您会看到类似......

something.resize()....etc

我知道从技术上讲,您可以添加大量 if 语句或 switch 语句来使其工作,但我觉得必须有一些更简洁的东西。

【问题讨论】:

  • 没有什么比打破链更具可读性的了,即if (itemMinify) something.minify(); if (itemResize) something.resize(); …。 something = something.minify(); 如果每次调用实际产生一个新对象。
  • @Ry- if (itemMinify) something = something.minify();
  • @zerkms:很多链接的东西只是返回同一个对象,因为它们很糟糕。

标签: javascript node.js methods chaining


【解决方案1】:

['minify', 'resize'].forEach(action => {something[action]()} 应该可以解决问题。您可以按照自己的方式生成['minify', 'resize'] 数组

【讨论】:

    【解决方案2】:

    有很多方法可以解决这个问题,但我会认真考虑这里的模式。无论您尝试做什么 - 都应该在您的代码中明确。

    方法链没有什么问题,但感觉就像你在试图强迫某些东西。

    看来你的变量是相关的。我可能会将这些分组到一个项目配置对象中。

    const itemConfig = {
        minify: true,
        resize: false,
        ...so on
    };
    

    然后您可以添加一些方法来迭代配置对象并使用相同的键执行条件操作。因为这些对象具有依赖关系,您可以将它们组合成另一个对象。 (这应该很容易弄清楚)

    const items = {
        minify: function() {
            // do some stuff here
        },
        ...so on
    };
    
    const itemConfigKeys = Object.keys(itemConfig);
    
    itemConfigKeys.map(function(itemKey) {
        if (itemConfig[itemKey]) {
            const itemMethod = items[itemKey];
            itemMethod();
        }
    });
    

    我故意在这里有点模糊。关于如何处理解决方案,有很多事情需要考虑。这是众多之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2017-09-16
      • 1970-01-01
      • 2017-08-03
      相关资源
      最近更新 更多