我正在制作工具。该工具应该能够接受参数,对参数执行初始任务,然后根据调用的函数返回结果。
我的第一次尝试是使用对象。但是我不得不在每个功能上重复执行初始任务
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 类对象?
我觉得我缺少什么。有解决这个问题的更好方法吗?
答案 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));