我导入了一个带有函数的库,并希望将该函数替换为以原始函数为参数以及附加函数的函数。
原始功能可能是logThis:
function logThis() {console.log('this'));
我可以创建一个新函数,该函数执行logThis然后记录“ that”;
function logThisThenThat() {
logThis();
console.log('that');
}
我想用一个执行原始功能的新功能替换logThis,然后执行另一个功能?函数组合是否可行?还是我必须创建一个具有不同名称的新函数,该函数由原始函数和其他函数组成。
类似的东西:
logThis = compose(logThis, logThat);
答案 0 :(得分:1)
您可以使用新功能覆盖现有功能。
像这样保留原件的副本...
_logThis = logThis;
...然后将您的新版本称为原始版本...
function logThis() {
_logThis();
// your other function call or new code goes here
}
但这并不是一个特别好的主意,因为这会修改对该方法的每个现有调用所发生的情况。这需要小心处理。
此外,范围在这里也很重要。这是您要执行的操作的基本示例。
答案 1 :(得分:1)
如果将logThis()
传递到compose()
函数中,则会在闭包中保留对它的引用,因此在创建新的logThis()
时它将继续存在。名称实际上并不那么重要,只要您按以下顺序重命名即可:在将名称指向新函数之前,先获取对旧logThis()
的引用。例如,logThis = compose(logThis, logThat)
的右侧位于下面的名称分配之前,因此您在重新分配名称之前先捕获函数引用:
function logThis() {console.log('this')};
function logThat() {console.log('that')};
let compose = (f1, f2) => () => {
f1()
f2()
}
logThis = compose(logThis, logThat)
logThis()
答案 2 :(得分:1)
您可以创建这样的函数。
function logThis() {
console.log("this");
}
function logThat() {
console.log("that");
}
let compose = (...func) => ()=> {
let functions = func;
functions.forEach((fn) => fn());
}
logThis = compose(logThis, logThat);
logThis();
添加(...func)
作为参数,您可以执行3、4个任意数量的所需/需要的功能。
注意:编辑代码段以匹配问题。 @ mark-meyer的selected answer是正确的。