【问题标题】:How can I prepend/append the results of all function calls in JavaScript如何在 JavaScript 中添加/附加所有函数调用的结果
【发布时间】:2019-02-09 12:32:17
【问题描述】:

假设我有一个函数

function sum(...args) { return args.reduce((acc, v) => acc + v, 0) }

我就是这样使用它的 ->

console.log( “hi ” + sum(2,3) + “ hello” ) 这会给我输出hi 5 hello

我想要达到的结果 hi start 5 end hello

基本上,我想在函数调用的每个输出中附加和前置一些固定值,而不管函数本身。

我尝试过覆盖 valueOf 属性,但它不起作用

注意:sum 只是一个示例函数。是否有一些可能的解决方案使其适用于所有功能?

【问题讨论】:

  • 您想在每个函数中附加和前置一些东西吗?还是只有这个功能?
  • 是的,我想在每个函数中附加一些内容
  • 代码中的每个函数?
  • 是的,我的代码中的每个函数

标签: javascript function append prepend


【解决方案1】:

如果您只需要它用于登录目的:

function sum(a, b) {
  return a + b;
}

function divide(a, b) {
  return a/b;
}

const oldLog = console.log;
console.log = function(msg) {
  oldLog(`start ${msg} end`);
}

console.log(sum(1,2));
console.log(divide(1,2));

【讨论】:

  • 这将追加和前置整个 console.log 输出我只想追加/前置函数响应
【解决方案2】:

您可以创建一个原型并使用它来调用您的函数,并在其中包含您想要的任何内容:

Function.prototype.debug = function(...args){
    let res = this.apply(this, args);
    console.log("Called function '" + this.name + "'. Result: start " + res + " end");
    return res;
}

function sum(...args) {
   return args.reduce((acc, v) => acc + v, 0)
}

console.log( "hi " +  sum.debug(2,3) + " hello");

【讨论】:

  • 这是一种类似于柯里化的方法。我不能修改每一个函数调用
  • 我试图寻找一种方法来使用Function.prototype.valueOf 挂钩每个函数调用,但它不会每次都被调用。据我所知,没有其他方法。
猜你喜欢
  • 2013-12-18
  • 2013-07-14
  • 2023-03-18
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多