gpt4 book ai didi

javascript - 用无限可选参数包装console.log

转载 作者:行者123 更新时间:2023-12-03 16:41:15 24 4
gpt4 key购买 nike

我正在尝试创建一个自定义记录器,该记录器只包装了console.log,但始终在开始处添加了一些内容,这使得该记录绝对来自我的插件。

我想出了以下代码:

var log = function(param1, param2) {
if (typeof param3 !== 'undefined') {
console.log('[MyPlugin]', param1, param2, param3);
} else if (typeof param2 !== 'undefined') {
console.log('[MyPlugin]', param1, param2);
}
};

这使开发人员可以运行以下命令:
log('foo', 'bar');
// Outputs '[MyPlugin] foo bar'

log('foo');
// Outputs '[MyPlugin] foo'

但我希望可以对此进行改进。

此实现的问题是:
  • 日志记录功能仅允许两个参数。如果可以接受很多会更好。
  • 有很多重复(多次console.log调用)。

  • 我尝试过的。

    我以为 ES6 spread-operator可以工作:
    var log = function(...params) {
    console.log('[MyPlugin]', params);
    };

    允许开发人员运行:
    log('foo', 'bar');
    // Outputs '[MyPlugin] Array [ "foo", "bar" ]'

    log('foo');
    // Outputs '[MyPlugin] Array [ "foo" ]'

    您会看到输出与原始函数不同。

    有更好的解决方案吗?

    最佳答案

    如果您正在使用扩展符号(它不是运算符),确实可以做到。您使用的是休止符(将参数收集到数组参数中),而不是散布符号(将它们传递给console.log时散布它们)。这是您使用点差的方式:

    var log = function(...params) {
    // Rest -----------^^^
    console.log('[MyPlugin]', ...params);
    // Spread ----------------^^^
    };

    例:

    var log = function(...params) {
    // Rest -----------^^^
    console.log('[MyPlugin]', ...params);
    // Spread ---------------^^^
    };

    log("testing", 1, 2, 3);


    如果您需要不转译就支持ES2015之前的环境,则可以使用 argumentsFunction#apply做同样的事情:
    var log = function() {
    var args = Array.prototype.slice.call(arguments);
    args.unshift('[MyPlugin]');
    console.log.apply(console, args);
    };

    现场示例:

    var log = function() {
    var args = Array.prototype.slice.call(arguments);
    args.unshift('[MyPlugin]');
    console.log.apply(console, args);
    };

    log("testing", 1, 2, 3);

    关于javascript - 用无限可选参数包装console.log,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45001489/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com