在JS中执行功能之前,请先执行带有参数的初始任务

时间:2019-07-03 05:34:28

标签: javascript function class object ecmascript-6

我正在制作工具。该工具应该能够接受参数,对参数执行初始任务,然后根据调用的函数返回结果。

我的第一次尝试是使用对象。但是我不得不在每个功能上重复执行初始任务

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 个答案:

答案 0 :(得分:1)

我会这样使用模块模式:

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());

答案 1 :(得分:0)

在做数学时不能只添加吗?

 

const test1 = {
  add: (a, b) => ++a + ++b,
  multiply: (a, b) => ++a * ++b
}
console.log(test1.add(1, 2));
console.log(test1.multiply(1, 2));