gpt4 book ai didi

javascript - 使用闭包创建我自己的 console.log 版本 | Javascript

转载 作者:行者123 更新时间:2023-11-29 15:30:14 26 4
gpt4 key购买 nike

我想创建我自己的 console.log 版本,使用“curry”函数并包括显示或不显示日志的可能性。 (灵感来自 SecretsOfTheJavascriptNinja)

所以我使用闭包实现了这个功能:

Function.prototype.conditionalCurry = function() {
var fn = this;
var args = Array.prototype.slice.call(arguments);
var show = args[0];
args = args.slice(1, args.length);

return function() {
if (show) {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
}
else return;
};
};

当我在终端中使用 node 测试代码时它有效:

var newLog = console.log.conditionalCurry(true, 'Always visible|' );
newLog('log visible'); // gives on the console: Always visible| log visible

newLog = console.log.conditionalCurry(false, 'never visible|' );
newLog('log visible'); // gives nothing, it works!

但是当我在 Chrome 48.0.2564.109 和 firefox 44.0.2 上测试代码时出现了问题,我认为这两种情况都是一样的。

据我所知,当我在终端中使用节点时,以某种方式传递给函数 conditionalCurry 的上下文“this”是一个匿名函数,但在浏览器的情况下,“this”显示为一个名为“log”的函数',我相信这会破坏密码。

知道如何在浏览器中实现此功能吗?

Fiddle

提前致谢!!!


使用 Bergi 的解决方案,现在可以使用了:Fiddle

最佳答案

我会厌倦修改现有语言特性的原型(prototype),例如 Function。看来您真的想要这些日志记录工具的实例,因此您不妨定义该实例并以某种“经典”的方式使用它。

例如,让我们创建一个名为“Logger”的“类”(只是使用与语言无关的术语)。记录器的实例将能够配置为显示前缀消息、有条件地向日志发送消息,以及以半传统方式使用日志。

function Logger(display,prefix){
this.display = display == [][0] ? true : display;
this.prefix = prefix;
}
Logger.prototype.log = function(){
if(this.display){
[].splice.apply(arguments,[0,0,this.prefix])
console.log.apply(console,arguments);
}else{
console.log(this.prefix);
}
return this;
};
Logger.prototype.show = function(truthy){
this.display = !!truthy;
return this;
};
Logger.prototype.note = function(msg){
this.prefix = msg;
return this;
};

var newLog = new Logger(true,'always |');
newLog.log('show me');//always | show me

newLog.note('never show').show(false);
newLog.log('show me now');//never show

关于javascript - 使用闭包创建我自己的 console.log 版本 | Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638627/

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