【问题标题】:How could I refactor my JS function to make sure this console.log structure does work?我如何重构我的 JS 函数以确保这个 console.log 结构有效?
【发布时间】:2021-10-18 14:18:56
【问题描述】:

我正在使用这种方法来解决这个问题,但我的 console.log 仍然没有返回预期的结果,我应该改变什么?

const executeCalculator = ({ x, y, operation }) => {
  let calculator = {
    x: this.x,
    y: this.y,
    operation: {
      "sum": (x, y) => x + y,
      "subtract": (x, y) => x - y,
      "multiply": (x, y) => x * y,
      "divide": (x, y) => x / y,
    },
  }
  if (operation !== 'sum' || 'multiply' || 'subtract' || 'divide') {
    console.error('undefined operation');
  } else {
    return;
  };
};

console.log(executeCalculator({
  operation: 'sum',
  x: 1,
  y: 1
}));

【问题讨论】:

  • executeCalculator 不返回任何内容。
  • 您希望它记录什么,而它记录的是什么?
  • 另外,x: this.x 不会做任何事情。您解构的值不在this
  • @mplungjan,您对工作语法的建议缺少!,否则与他们试图实现的目标相反

标签: javascript function oop


【解决方案1】:
  • 首先,您的operation 对象格式错误,有一个多余的逗号
  • 这不是必需的:
x: this.x,
y: this.y,

...因为您的函数参数中已经有了参数。

  • "sum": (x, y),x、y 参数不是必需的。
  • 使用includes()检查是否有有效操作,条件如下:
!['sum', 'multiply', 'subtract', 'divide'].includes(operation)
  • executeCalculator() 函数没有返回任何内容,您需要返回操作,这就是您得到 undefined 结果的原因。

const executeCalculator = ({ x, y, operation }) => {

  let calculator = {
    operation: {
      "sum": () => x + y,
      "subtract": () => x - y,
      "multiply": () => x * y,
      "divide": () => x / y
    }
  }
  if (!['sum', 'multiply', 'subtract', 'divide'].includes(operation)) {
    console.error('undefined operation');
  } else {
    return calculator.operation[operation]();
  };
};

console.log(executeCalculator({
  operation: 'sum',
  x: 1,
  y: 1
}));

【讨论】:

  • 检查operation in calculator.operation 来决定是否执行它要容易得多。而calculator.operation 也不需要在executeCalculator 中,因为它只包含简单的函数。如果它被提取并且函数具有参数(如在 OP 中),则executeCalculator 的整个主体将成为检查operation 是否有效然后调用calculator.operation[operation](x, y)。然而,到那时,它几乎不是 OO。
  • 感谢您的建议。有效!另外,我不明白你在这里使用的语法:calculator.operation[operation](),你能解释一下吗?
  • @VivianeMiranda here calculator.operation[operation]() 代码所做的就是进入calculator.operation 对象,并调用相应的操作函数。它也可以写成calculator.operation.sum()calculator.operation.subtract(),但是由于你不知道哪个是操作,你需要使用方括号[]将函数名作为字符串调用。
  • “首先,您的操作对象格式错误,有一个额外的逗号”ES5 in 2009 以来,对象初始化程序中的尾随逗号一直是有效语法。
  • @mplungjan 我不知道如何回答,除非重新编写整个代码。 OP问“我应该改变什么”,我个人会说“你从头开始的整个方法”。要么需要从 OO 中删除一些东西并且更实用,要么实际上 OO like here。我认为我写不出一个能纠正所有错误并准确描述这一切的答案。
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2017-03-26
  • 2011-03-09
  • 2022-12-05
  • 2018-09-02
相关资源
最近更新 更多