Выполните исходное задание с параметрами перед выполнением функции в JS - PullRequest
0 голосов
/ 03 июля 2019

Я делаю инструмент.Этот инструмент должен иметь возможность принимать параметр, выполнять начальную задачу с параметрами, а затем возвращать результат в зависимости от того, какая функция вызывается.

Моя первая попытка была с использованием объекта.Но мне пришлось повторить начальное задание для каждой функции

const test1 = {
  add: (a, b) => {
    a = a + 1; // This part became repetitive
    b = b + 1; // and I had to copy it to other function
    return a + b;
  },
  multiply: (a, b) => {
    a = a + 1;
    b = b + 1;
    return a * b;
  }
}
console.log("test1=" + test1.add(1, 2));

Затем я попытался использовать функцию и вместо нее использовать переключатель.Это то, что я сейчас использую для решения этой проблемы.Это лучшее решение для этого?

function test2(o, a, b) {
  a = a + 1;
  b = b + 1;
  switch (o) {
    case "add":
      return (a + b);
    case "multiply":
      return (a * b);
  }
}
console.log("test2=" + test2("add", 1, 2));

Но потом я подумал об использовании классов.Я вызываю его, создавая новый объект класса, и вызываю функцию класса

class test3 {
  constructor(a, b) {
    this.a = a + 1;
    this.b = b + 1;
  }
  add() {
    return this.a + this.b;
  }
  multiply() {
    return this.a * this.b;
  }
}
console.log("test3=" + new test3(1, 2).add());

Кажется, это гораздо удобнее и проще для чтения, чем переключение регистра, но я беспокоюсь, что создаю новый класс снова и снова для функции, которую буду использоватьодин раз, но затем отбрасывать.

Есть ли способ заставить класс выполнять первоначальную задачу с параметром, но сохранять функции статичными, чтобы мне не приходилось создавать экземпляр класса new каждый раз, когда мне нужно его использовать?

Я чувствую, что что-то упустил.Есть ли лучший способ справиться с этим?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Я бы использовал шаблон модуля следующим образом:

function test1(a, b) {
  const _a = a + 1;
  const _b = b + 1;  
  function addNums() {    
    return _a + _b;
  }
  function multiplyNums() {    
    return _a * _b;
  }
  return {
    add: addNums,
    multiply: multiplyNums
  }  
}

const api = test1(1,2);
console.log(api.add());
console.log(api.multiply());
0 голосов
/ 03 июля 2019

Разве вы не можете просто добавить, когда вы делаете математику?

 

const test1 = {
  add: (a, b) => ++a + ++b,
  multiply: (a, b) => ++a * ++b
}
console.log(test1.add(1, 2));
console.log(test1.multiply(1, 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...